UIElement.Focusable 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值指示元素是否可以接收焦点。 这是一个依赖属性。
public:
property bool Focusable { bool get(); void set(bool value); };
public bool Focusable { get; set; }
member this.Focusable : bool with get, set
Public Property Focusable As Boolean
属性值
如果元素可聚焦,则 true
;否则 false
。 默认值为 false
。
实现
示例
以下示例代码演示了特定自定义控件的控件模板,该模板对模板中的某个元素设置 Focusablefalse
。
<Window.Resources>
<Style x:Key="TextBoxNoScrollViewer" TargetType="{x:Type TextBoxBase}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Border
CornerRadius="2"
Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
>
<!--
The control template for a TextBox or RichTextBox must
include an element tagged as the content host. An element is
tagged as the content host element when it has the special name
PART_ContentHost. The content host element must be a ScrollViewer,
or an element that derives from Decorator.
-->
<AdornerDecorator
x:Name="PART_ContentHost"
Focusable="False"
/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
注解
只有焦点元素接收键盘输入。
Focusable 是依赖项属性实际Microsoft .NET 属性访问器。 此特定依赖属性非常频繁地在派生元素类中以不同的方式设置其明显的“默认值”值,尤其是在控件中。 这通常采用以下两种方式之一:
依赖属性由特定的派生类继承,但派生类会重写依赖属性的元数据并更改属性值。
样式或模板应用于元素,该元素以不同的方式设置依赖属性值。
例如,即使 ButtonButton 直接从 UIElement继承 Focusable 作为公共语言运行时 (CLR) 属性,FocusableFocusable 的明显“默认值”也会 true
。 这是因为 Focusable 依赖属性的应用元数据值在 Control 基类的静态构造函数中被重写,该构造函数位于类层次结构中的 Button 和 UIElement 之间。
Control 或其派生类继承时,Control 重新定义此属性的默认值,使其 true
。
如果继承自 Label(即 Control 派生类),则再次重新定义默认值以 false
。
Dependency 属性信息
标识符字段 | FocusableProperty |
设置为 true 的元数据属性 |
没有 |
继承者说明
直接从 UIElement 派生(而不是从 Control派生)时,请考虑是否希望元素具有可聚焦性,因为默认情况下该元素将不可聚焦。 如果希望元素可聚焦,请在类型的静态构造函数中重写此属性的元数据,如下所示:
FocusableProperty.OverrideMetadata(typeof(myElement), new UIPropertyMetadata(true));
FocusableProperty.OverrideMetadata(GetType(myElement), New UIPropertyMetadata(True))
其中 myElement
应是重写元数据值的类型的类名。