UIElement.Focusable 属性

定义

获取或设置一个值,该值指示元素是否可以接收焦点。 这是一个依赖属性。

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 基类的静态构造函数中被重写,该构造函数位于类层次结构中的 ButtonUIElement 之间。

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 应是重写元数据值的类型的类名。

适用于

另请参阅