次の方法で共有


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 プロパティ アクセサーです。 この特定の依存関係プロパティは、派生要素クラス (特にコントロール) では、明らかな "既定" の値が異なる設定を持つ場合がよくあります。 これは一般的に、次の 2 つの方法のいずれかで発生します。

  • 依存関係プロパティは特定の派生クラスによって継承されますが、その派生クラスは依存関係プロパティのメタデータをオーバーライドし、プロパティの既定値を変更します。

  • スタイルまたはテンプレートが要素に適用され、依存関係プロパティの値が異なる方法で設定されます。

たとえば、Button が共通言語ランタイム (CLR) プロパティとして FocusableUIElementから直接継承している場合でも、Button コントロールの Focusable の明らかな "既定値" は trueされます。 これは、Focusable 依存関係プロパティの適用されたメタデータ値が、クラス階層内の ButtonUIElement の間にある、Control 基底クラスの静的コンストラクター内でオーバーライドされたためです。

Control またはその派生クラスによって継承 Control、このプロパティの既定値を trueに再定義します。

Label (Control 派生クラス) によって継承された場合、既定値は再び再定義され、falseされます。

依存関係プロパティ情報

識別子フィールド FocusableProperty
true に設定されたメタデータ プロパティ 何一つ

注意 (継承者)

(Controlからではなく) UIElement から直接派生する場合は、既定では要素がフォーカスできないため、要素をフォーカス可能にするかどうかを検討してください。 要素をフォーカス可能にする場合は、次のように型の静的コンストラクター内でこのプロパティのメタデータをオーバーライドします。

FocusableProperty.OverrideMetadata(typeof(myElement), new UIPropertyMetadata(true));
FocusableProperty.OverrideMetadata(GetType(myElement), New UIPropertyMetadata(True))

ここで myElement は、メタデータ値をオーバーライドする型のクラス名にする必要があります。

適用対象

こちらもご覧ください