FocusableProperty:
只有具有焦点的元素才可以接收键盘输入。
Focusable 是 Microsoft .NET 属性访问器,它实际上是一个依赖项属性。 这一特定依赖项属性非常普遍地在派生元素类(尤其是控件)中以不同方式设置其原本的“默认”值。 这种情况通常以两种方式发生:
-
依赖项属性由特定的派生类继承,但是该派生类重写了依赖项属性的元数据并更改了属性的默认值。
-
向某个元素应用了样式或模板,从而设置了不同的依赖项属性值。
例如,Button 控件的原本“默认” Focusable 将是 true,即使 Button 直接从 UIElement 继承 Focusable 作为 common language runtime (CLR) 属性也是如此。 这是因为 Focusable 依赖项属性应用的元数据值在 Control 基类的静态构造函数中被重写,该基类位于类层次结构的 Button 和 UIElement 之间。
在被 Control 或其派生类继承时,Control 将此属性的默认值重新定义为 true。
在被 Label(它是 Control 的派生类)继承时,默认值再次重新定义为 false。
对继承者的说明当从 UIElement (与从 Control 相对)直接派生时,应考虑是否希望元素可获得焦点,因为默认情况下元素不能获得焦点。 如果希望使元素可获得焦点,则在类型的静态构造函数中重写此属性的元数据,如下所示:
FocusableProperty.OverrideMetadata(typeof(myElement), new UIPropertyMetadata(true));
其中,myElement 应该是要重写元数据值的类型的类名。
DefaultStyleKeyProperty:
当此依赖项属性位于指定类型的实例上时为其提供替换元数据,而不是在最初注册依赖项属性时提供的元数据。
重载此成员。有关此成员的完整信息(包括语法、用法和示例),请单击重载列表中的相应名称。
这样就可以先把wpf 控件的类先定义好,然后用DefaultStyleKeyProperty把类与xaml数据关联起来.