Control.Template プロパティ

定義

コントロール テンプレートを取得または設定します。 コントロール テンプレートは、UI でのコントロールの視覚的な外観を定義し、XAML マークアップで定義されています。

public:
 property ControlTemplate ^ Template { ControlTemplate ^ get(); void set(ControlTemplate ^ value); };
ControlTemplate Template();

void Template(ControlTemplate value);
public ControlTemplate Template { get; set; }
var controlTemplate = control.template;
control.template = controlTemplate;
Public Property Template As ControlTemplate
<control Template="{StaticResource templateResourceKey}"/>
- or -
<Style TargetType="controlTypeName">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="controlTypeName">
        templateRoot
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

プロパティ値

コントロールの外観を定義するテンプレート。 ControlTemplate には、コンテンツとしてルート要素が 1 つだけ必要です。

この例では、Setter.Property 値が "Template" の Style および Setter として定義された、より完全なコントロール テンプレートを示します。 これは RadioButton コントロールの名前付きスタイルです。 これには、通常、機能コントロール テンプレートの一部であるテンプレート要素 (テンプレート VisualStateManager.VisualStateGroups のルート要素にアタッチされた添付プロパティ要素など) と、目立つ各コントロール パーツに割り当てられた x:Name 属性値 が含まれます。

<Style x:Key="TextRadioButtonStyle" TargetType="RadioButton"> 
    <Setter Property="MinWidth" Value="0"/> 
    <Setter Property="MinHeight" Value="0"/> 
    <Setter Property="Template"> 
        <Setter.Value> 
            <ControlTemplate TargetType="RadioButton"> 
                <Grid Background="Transparent"> 
                    <TextBlock 
                        x:Name="Text" 
                        Text="{TemplateBinding Content}" 
                        Margin="3,-7,3,10" 
                        TextWrapping="NoWrap" 
                        Style="{StaticResource SubheaderTextStyle}"/> 
                    <Rectangle 
                        x:Name="FocusVisualWhite" 
                        IsHitTestVisible="False" 
                        Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" 
                        StrokeEndLineCap="Square" 
                        StrokeDashArray="1,1" 
                        Opacity="0" 
                        StrokeDashOffset="1.5"/> 
                    <Rectangle 
                        x:Name="FocusVisualBlack" 
                        IsHitTestVisible="False" 
                        Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" 
                        StrokeEndLineCap="Square" 
                        StrokeDashArray="1,1" 
                        Opacity="0" 
                        StrokeDashOffset="0.5"/> 

                    <VisualStateManager.VisualStateGroups> 
                        <VisualStateGroup x:Name="CommonStates"> 
                            <VisualState x:Name="Normal"/> 
                            <VisualState x:Name="PointerOver"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPointerOverForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Pressed"> 

                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Disabled"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ButtonDisabledForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                        </VisualStateGroup> 
                        <VisualStateGroup x:Name="FocusStates"> 
                            <VisualState x:Name="Focused"> 
                                <Storyboard> 
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualWhite" Storyboard.TargetProperty="Opacity"/> 
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualBlack" Storyboard.TargetProperty="Opacity"/> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Unfocused"/> 
                        </VisualStateGroup> 
                        <VisualStateGroup x:Name="CheckStates"> 
                            <VisualState x:Name="Checked"/> 
                            <VisualState x:Name="Unchecked"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Indeterminate"/> 
                        </VisualStateGroup> 
                    </VisualStateManager.VisualStateGroups> 
                </Grid> 
            </ControlTemplate> 
        </Setter.Value> 
    </Setter> 
</Style> 

注釈

上記の 2 番目の XAML 構文は、Style の一部としての Setter 構文です。 これは、ほぼすべてのケースで Control の Template 値が定義される方法です。

TargetType は、Template 値として使用されるすべての ControlTemplate 要素に必要な属性です。 スタイルセッター構文を使用している場合、この値は Template の Setter を含む Style の TargetType プロパティと一致する必要があります。

ControlTemplate は、Control の外観を指定します。コントロールに ControlTemplate がない場合、コントロールにはアプリに表示されるプレゼンスがありません。 コントロール作成者は既定のコントロール テンプレートを定義し、アプリ作成者は ControlTemplate XAML を再テンプレート化して、コントロールのビジュアル ツリーを再定義できます。

コントロール テンプレートは、通常、コントロール固有の暗黙的なスタイルの一部として Extensible Application Markup Language (XAML) で設定されます。 この場合、SetterProperty 値は文字列 "Template" として設定され、Setter.Value 値、ControlTemplate オブジェクト要素を含むプロパティ要素として設定されます。 たとえば、ScrollViewer の Template 値を定義する Style です。 これは暗黙的なスタイルの例であり、 StyleResourceDictionary に含めることができますが、 x:Key 属性は必要ありません。

<ResourceDictionary>
  <Style TargetType="ScrollViewer">
  ...
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="ScrollViewer">
          <!--visual root of template for a ScrollViewer-->
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
  ...
</ResourceDictionary>

スタイルとテンプレート

StyleSetter を使用して、任意の依存関係プロパティに値を適用できます。 ただし、一般的なスタイルの XAML マークアップの大部分を構成するのは、Control 派生クラスの Template プロパティの Setter です。 Style を使用してコントロール テンプレートを定義する場合、その Control.Template セッターの Style 要素の TargetTypeControlTemplate 要素の TargetType は常に同じ値を使用する必要があります。 テンプレート セッターは、そのテンプレートが適用されるコントロールの基本的なテンプレート化された UI 定義を定義します。 また、コントロールのビジュアル状態と、既定のテーマの切り替えなどの状態ベースの UI 定義も含まれています。 ListBox などの複雑なコントロールの場合、既定のテンプレート Style内の ControlTemplate には、数百行の XAML を含めることができます。 コントロール テンプレートシナリオにおけるテンプレートの役割の詳細については、「 XAML コントロール テンプレート」を参照してください。

暗黙的なスタイル

Style が同TargetType のすべてのオブジェクトによって暗黙的に使用されるようにスタイルを定義できます。このようなオブジェクトの各インスタンスが Style を FrameworkElement.Style値として明示的に参照する必要はありません。 リソースが <Style>x:Key 属性なしで ResourceDictionary で宣言されている場合、x:Key 値は TargetType プロパティの値を使用します。 スタイルを暗黙的に設定すると、TargetType 値から派生した要素には適用されず、TargetType と完全に一致する型にのみスタイルが適用されます。 たとえば、アプリケーション内のすべての ToggleButton コントロールに対してスタイルを暗黙的に作成し、アプリケーションに ToggleButton コントロールと CheckBox コントロールがある場合 (CheckBoxToggleButton から派生)、" ToggleButton " 暗黙的なスタイルは ToggleButton コントロールにのみ適用されます。

適用対象

こちらもご覧ください