Style.TargetType プロパティ

定義

スタイルの対象となる型を取得または設定します。 TargetType リソース キーが指定されていない場合は、暗黙的なスタイル リソースを宣言するために使用できます。

public:
 property TypeName TargetType { TypeName get(); void set(TypeName value); };
TypeName TargetType();

void TargetType(TypeName value);
public System.Type TargetType { get; set; }
var typeName = style.targetType;
style.targetType = typeName;
Public Property TargetType As Type
<Style TargetType="typeName"/>

プロパティ値

スタイルが適用されるオブジェクトの型。 この値は通常、コードではなく XAML で設定されます。 「解説」を参照してください。

この例では、2 つのスタイルを作成します。1 つは TextBlock 用、もう 1 つは TextBox 用です。 各スタイルは、 コントロールの 2 つのインスタンスに適用され、 と TextBoxのそれぞれにTextBlock均一な外観が作成されます。 この例では、Style を {StaticResource} マークアップ拡張として参照することで、各コントロールの FrameworkElement.Style プロパティを設定します。

<StackPanel x:Name="rootPanel">
  <StackPanel.Resources>
    <!--Create a Style for a TextBlock to specify that the
              Foreground equals Navy, FontSize equals 14, and
              VerticalAlignment equals Botton.-->
    <Style TargetType="TextBlock" x:Key="TextBlockStyle">
      <Setter Property="Foreground" Value="Navy"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="VerticalAlignment" Value="Bottom"/>
    </Style>

    <!--Create a Style for a TextBox that specifies that
              the Width is 200, Height is 30, Margin is 4,
              Background is LightBlue, and FontSize is 14.-->
    <Style TargetType="TextBox" x:Key="TextBoxStyle">
      <Setter Property="Width" Value="200"/>
      <Setter Property="Height" Value="30"/>
      <Setter Property="Margin" Value="4"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="Background">
        <Setter.Value>
          <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
            <GradientStop Color="White" Offset="0.0"/>
            <GradientStop Color="LightBlue" Offset="0.5"/>
            <GradientStop Color="Navy" Offset="1"/>
          </LinearGradientBrush>
        </Setter.Value>
      </Setter>
    </Style>
  </StackPanel.Resources>

  <!--Apply the TextBlockStyle and TextBoxStyle to each 
      TextBlock and TextBox, respectively.-->
  <StackPanel Orientation="Horizontal">
    <TextBlock Text="First Name:" Style="{StaticResource TextBlockStyle}"/>
    <TextBox Style="{StaticResource TextBoxStyle}"/>
  </StackPanel>
  <StackPanel Orientation="Horizontal">
    <TextBlock Text="Last Name:" Style="{StaticResource TextBlockStyle}"/>
    <TextBox Style="{StaticResource TextBoxStyle}"
             Margin="6,4,4,4"/>
  </StackPanel>
  <StackPanel x:Name="emailAddressPanel" Orientation="Horizontal"/>
</StackPanel>

注釈

TargetTypeStyle を使用または宣言するすべてのケースでは、値が必要です。 既定値はありません。 StyleFrameworkElement.Style プロパティのインライン値として使用される であっても、明示的TargetTypeな値が必要です。

値を指定する一般的な TargetType 方法は、 Style 要素の XAML 属性を使用することです。 XAML で設定する場合、指定する の TargetType 意味と値は、XAML での型の表現方法のいくつかの側面を考慮します。

XAML の場合、XAML 要素を使用して型を参照するために必要なプレフィックスは、属性値に TargetType 含める必要があります。 たとえば、"local:" プレフィックスにマップされているコード名前空間で定義されているカスタム型を対象とするスタイルの場合、その型のスタイルの属性値には、 TargetType 型名の前に同じプレフィックスを含める必要があります。 この動作は、Windows ランタイム XAML パーサーの組み込みの文字列型変換動作によって有効になります。

カスタム型のスタイルを定義するときに、 のマッピング プレフィックスTargetTypeを含めた後は、その Style 内の SetterProperty 値にプレフィックスを含めないでください。

に指定 TargetType する値は、スタイル内で指定する Setter.Property 値の参照動作を変更します。 具体的には、XAML 属性値の名前 Setter.Property で参照する依存関係プロパティは、 型または任意の TargetType 先祖クラスに存在する必要があります。 たとえば、指定した TargetTypeButton で、Style の XAML 属性値の Setter.Property 1 つが "Background" の場合、Control.Background プロパティに解決されます (Control はクラス継承の Button の 3 レベル上にあり、ButtonControl のすべてのプロパティを継承します)。 値を一般的な UI マークアップで使用するのと同じ UI 要素名に指定 TargetType するのが一般的です。通常は先祖クラスに名前を付けることはできません (技術的には許可されていますが)。

Style にコントロール テンプレート (Template プロパティの値) TargetType を宣言する Setter が含まれている場合、親 Style の値は、含まれている ControlTemplate 要素の TargetType 値と一致する必要があります。

暗黙的なスタイル

スタイルは、ほとんどの場合、共有され、そのスタイルを参照するアプリの各 UI 要素に適用される XAML リソースとして宣言されます。 リソースとして宣言するには、 Style 要素を含むすべての XAML 要素に、実行時に参照する各リソースを区別するキーが resources コレクション内に必要です。 Style 要素 (および ControlTemplate などのさまざまなテンプレート要素) は、暗黙的なスタイルと呼ばれる機能をサポートします。 暗黙的なスタイルの場合、値に指定 TargetType する値は、そのリソース コレクション スコープでそのスタイルのキーとしても機能し、 x:Key 属性値 を指定する必要はありません。 (これに対し、リソース コレクション内で宣言する他のほとんどの要素には明示的な x:Key 属性値 が必要であり、これを強制するデザイン時エラーまたはパーサー エラーが発生します)。

暗黙的なスタイルを使用して宣言されたスタイルは、暗黙的なスタイルの に一致TargetTypeする型である UI 要素インスタンスの Style 値として使用されます。 この動作を取得するために、コントロールは Style 属性値と {StaticResource} マークアップ拡張 参照を持つスタイルを参照する必要はありません。これらのコントロールが既存の暗黙的なスタイルの型と一致する場合は暗黙的な動作です。

暗黙的なスタイルは、値として参照される型のサブタイプである要素には TargetType 適用されません。 たとえば、 ToggleButton コントロールの暗黙的なスタイルを宣言し、アプリに CheckBox コントロール (CheckBox から ToggleButton派生) がある場合、スタイルはコントロールに対して ToggleButton 特別に適用されますが、コントロールには CheckBox 適用されません。

Windows ランタイムでは、Windows ランタイム API の一部である実用的な UI 要素ごとに既定の暗黙的なスタイルが定義されます。 これは、これらのスタイルによって要素 (特にテンプレート) のビジュアルが定義され、ビジュアルのない要素が UI に表示されたり、レイアウトに参加したりしないためです。 これらの暗黙的なスタイルはすべて、generic.xaml という名前のデザイン ヘルパー XAML ファイルで確認できます。 XAML の編集に使用するツールでは、ツールで有効にされているスタイルのコピーを編集するときに、このファイルの個別の部分をアプリの XAML にコピーできます。 既定の暗黙的なスタイル内には、リソース参照のレイヤーが多数あり、 {ThemeResource} マークアップ拡張機能 やテーマ固有のブラシやその他のリソースを使用したテーマのサポートも多数あります。 それ以外の場合は、既定の暗黙的なスタイルを定義するWindows ランタイムから取得される暗黙的なスタイルをオーバーライドできます。 詳細については、「 XAML スタイルXAML コントロール テンプレート」を参照してください。

コードでの TargetType の使用

コードでの設定 TargetType は一般的ではありません。 XAML スタイル システムは、XAML をリソースとして読み込み、スタイルのすべての側面を事前に準備することで使用することを目的としています。 コードで作成または参照される スタイル に TargetType を設定する必要があるランタイムまで、コントロールのスタイル設定方法やスタイルの適用方法に関する情報を知らないシナリオはほとんどありません。

コードで を TargetType 取得することも珍しいですが、これを行うシナリオは他にもいくつかあります。 たとえば、XAML で既に定義されている名前付き Style リソースのセットがあるとします。 ただし、コントロールに適用しようとしているスタイルに、適用するコントロールTargetTypeの種類に対して機能する値があることをダブルチェックすることもできます。 そのため、次のようなコードがある場合があります。

private bool VerifyStyle(FrameworkElement scope, String styleKey, Control applyTo)
{
    Style styleToCheck = scope.Resources[styleKey] as Style;
    if (styleToCheck != null)
    {
        if (styleToCheck.TargetType == applyTo.GetType())
        {
            // applyTo.Style = styleToCheck;
            return true;
        }
    }
    return false;
}

ヒント

C# を使用してプログラミングする場合、 TypeName 型は System.Type としてプロジェクトされます。 C# を使用してプログラミングする場合は、通常、 演算子を typeof 使用して、型名に基づいて型の への System.Type 参照を文字列として取得します。

移行に関する注意事項

  • xaml for Windows Presentation Foundation (WPF) を使用している場合は、x:Type マークアップ拡張機能を使用して、System.Type を受け取る XAML 値を入力した可能性があります。 Windows ランタイム XAML パーサーは x:Type をサポートしていません。 代わりに、マークアップ拡張機能を使用せずに名前で型を参照する必要があります。必要な XAML からバッキング型への変換は、XAML パーサーの組み込みの変換動作によって既に処理されています。

適用対象