在此整理WPF遇到的一些问题.

 

1. 自定义控件中需要静态构造函数,但是自定义的界面的代码InitializeComponent();是IDE创建的,如果将构造函数改成静态,无法调用界面初始化方法InitializeComponent();需要手工将InitializeComponent();方法改成静态?

解答:静态构造函数是用来初始化静态变量或方法的,与非静态构造函数无关.界面初始化代码写在非静态构造函数中.

 

2. metadata = new FrameworkPropertyMetadata(SystemFonts.MessageFontSize, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsParentMeasure);最后一个参数的用法?

解答:采用带Flag的枚举,查看FrameworkPropertyMetadataOptions定义得知,确实符合运算符|的用法.

public enum FrameworkPropertyMetadataOptions
    {
        // 摘要:
        //     未指定任何选项;依赖项属性使用 Windows Presentation Foundation (WPF) 属性系统的默认行为。
        None = 0,
        //
        // 摘要:
        //     布局组合的测量处理过程受到此依赖项属性的值更改的影响。
        AffectsMeasure = 1,
        //
        // 摘要:
        //     布局组合的排列处理过程受到此依赖项属性的值更改的影响。
        AffectsArrange = 2,
        //
        // 摘要:
        //     父元素的测量处理过程受到此依赖项属性的值更改的影响。
        AffectsParentMeasure = 4,
        //
        // 摘要:
        //     父元素的排列处理过程受到此依赖项属性的值更改的影响。
        AffectsParentArrange = 8,
        //
        // 摘要:
        //     呈现或布局组合的某一方面(不包括测量或排列)受到此依赖项属性的值更改的影响。
        AffectsRender = 16,
        //
        // 摘要:
        //     此依赖项属性的值由子元素继承。
        Inherits = 32,
        //
        // 摘要:
        //     此依赖项属性的值跨越各个树,以便用于属性值继承。
        OverridesInheritanceBehavior = 64,
        //
        // 摘要:
        //     此依赖项属性不允许进行数据绑定。
        NotDataBindable = 128,
        //
        // 摘要:
        //     此依赖项属性的数据绑定的 System.Windows.Data.BindingMode 默认为 System.Windows.Data.BindingMode.TwoWay。
        BindsTwoWayByDefault = 256,
        //
        // 摘要:
        //     此依赖项属性值应由日记进程保存或还原,或在通过统一资源标识符 (URI) 导航时保存或还原。
        Journal = 1024,
        //
        // 摘要:
        //     此依赖项属性值的子属性不影响呈现的任何方面。
        SubPropertiesDoNotAffectRender = 2048,
    }

 

3 共享路由事件是什么?如 SampleWellButton.ClickEvent = Button.ClickEvent.AddOwner(typeof(SampleWellButton));

解答:如果自定义控件的事件与某事件相同,则可以通过事件提供者AddOwner的方式共享.