ControlTemplate クラス
TOC
目次を折りたたむ
目次を展開する
この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

ControlTemplate クラス

コントロールの複数のインスタンスで共有できる、Control のビジュアル構造と動作特性を指定します。

名前空間:  System.Windows.Controls
アセンブリ:  PresentationFramework (PresentationFramework.dll 内)
XAML の XMLNS: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

[DictionaryKeyPropertyAttribute("TargetType")]
[LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable)]
public class ControlTemplate : FrameworkTemplate
<ControlTemplate>
  <VisualTreeRootNode>
VisualTreeNodeContents
  </VisualTreeRootNode>
</ControlTemplate>

XAML の値

ControlTemplate

ControlTemplate または派生クラスのオブジェクト要素です。

VisualTreeRootNode

ControlTemplate (または派生クラス) の直接の子としての単一の XAML 要素。 テンプレートは、1 つのルート ノードを持つ必要があります。 有効なテンプレートを生成するために、VisualTreeRootNode として選択されたノードは、それ自体のコンテンツ モデル (通常は複数の子要素をサポートするモデル) をサポートする必要があります。

VisualTreeNodeContents

対象のテンプレートに含まれる 1 つ以上の要素。 VisualTreeRootNode として選択された要素が 1 つの子だけをサポートする場合、VisualTreeNodeContents として宣言できる要素は 1 つだけです。 選択された VisualTreeRootNode がテキスト コンテンツ プロパティをサポートする場合は、テキスト コンテンツを提供することもできます (ただし、一般的ではありません)。

ControlTemplate 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドControlTemplate() ControlTemplate クラスの新しいインスタンスを初期化します。
パブリック メソッドControlTemplate(Type)指定された対象の型を使用して ControlTemplate クラスの新しいインスタンスを初期化します。
このページのトップへ

  名前説明
パブリック プロパティDispatcherこの DispatcherObject が関連付けられている Dispatcher を取得します。 (DispatcherObject から継承されます。)
パブリック プロパティHasContent最適化されたコンテンツがこのテンプレートに含まれているかどうかを示す値を取得します。 (FrameworkTemplate から継承されます。)
パブリック プロパティIsSealedこのオブジェクトが不変の状態で変更不可能であるかどうかを示す値を取得します。 (FrameworkTemplate から継承されます。)
パブリック プロパティResourcesこのテンプレートのスコープ内で使用できるリソースのコレクションを取得または設定します。 (FrameworkTemplate から継承されます。)
パブリック プロパティTargetTypeこの ControlTemplate の対象となる型を取得または設定します。
パブリック プロパティTemplateライターがテンプレートを定義または適用するときに、テンプレートの XAML ノードを記録または再生するオブジェクトへの参照を取得または設定します。 (FrameworkTemplate から継承されます。)
パブリック プロパティTriggersプロパティの変更を適用する、または指定した条件に基づいてアクションを実行する TriggerBase オブジェクトのコレクションを取得します。
パブリック プロパティVisualTreeテンプレートのルート ノードを取得または設定します。 (FrameworkTemplate から継承されます。)
このページのトップへ

  名前説明
パブリック メソッドCheckAccess呼び出し元のスレッドがこの DispatcherObject にアクセスできるかどうかを確認します。 (DispatcherObject から継承されます。)
パブリック メソッドEquals(Object)指定した Object が、現在の Object と等しいかどうかを判断します。 (Object から継承されます。)
プロテクト メソッドFinalize オブジェクトがガベジ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッドFindNameこのテンプレート内で定義された、指定した名前に関連付けられている要素を検索します。 (FrameworkTemplate から継承されます。)
パブリック メソッドGetHashCode特定の型のハッシュ関数として機能します。 (Object から継承されます。)
パブリック メソッドGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッドLoadContentテンプレートのコンテンツをオブジェクトのインスタンスとして読み込み、コンテンツのルート要素を返します。 (FrameworkTemplate から継承されます。)
プロテクト メソッドMemberwiseClone現在の Object の簡易コピーを作成します。 (Object から継承されます。)
パブリック メソッドRegisterName現在の名前スコープに新しい名前とオブジェクトのペアを登録します。 (FrameworkTemplate から継承されます。)
パブリック メソッドSealテンプレートをロックし、変更できないようにします。 (FrameworkTemplate から継承されます。)
パブリック メソッドShouldSerializeResourcesシリアル化プロセスが、このクラスのインスタンスの Resources プロパティの値をシリアル化する必要があるかどうかを示す値を返します。 (FrameworkTemplate から継承されます。)
パブリック メソッドShouldSerializeVisualTreeシリアル化プロセスが、このクラスのインスタンスの VisualTree プロパティの値をシリアル化する必要があるかどうかを示す値を返します。 (FrameworkTemplate から継承されます。)
パブリック メソッドToString 現在のオブジェクトを表す文字列を返します。 (Object から継承されます。)
パブリック メソッドUnregisterNameXAML 名前スコープから名前とオブジェクトのマッピングを削除します。 (FrameworkTemplate から継承されます。)
プロテクト メソッドValidateTemplatedParent規則のセットに対してテンプレートが適用される親をチェックします。 (FrameworkTemplate.ValidateTemplatedParent(FrameworkElement) をオーバーライドします。)
パブリック メソッドVerifyAccess呼び出し元のスレッドがこの DispatcherObject にアクセスできるように強制します。 (DispatcherObject から継承されます。)
このページのトップへ

  名前説明
明示的なインターフェイス実装プライベート メソッドINameScope.FindNameインフラストラクチャ。 指定された識別名を持つオブジェクトを返します。 (FrameworkTemplate から継承されます。)
明示的なインターフェイス実装プライベート メソッドIQueryAmbient.IsAmbientPropertyAvailable指定されたアンビエント プロパティを現在のスコープで使用できるかどうかを照会します。 (FrameworkTemplate から継承されます。)
このページのトップへ

ControlTemplate を使用すると、コントロールのビジュアル構造を指定できます。 コントロールの作成者は、既定の ControlTemplate を定義できます。また、アプリケーションの作成者は、ControlTemplate をオーバーライドしてコントロールのビジュアル構造を再構築できます。

コントロール テンプレートは、WPF のスタイルとテンプレート モデルにより提供される多数の機能のうちの 1 つです。 スタイルとテンプレート モデルには優れた柔軟性が備わっているため、多くの場合独自のコントロールを作成する必要はありません。 アプリケーションの作成者がコントロールの視覚化を変更する場合や既存のコントロールの ControlTemplate を置き換える場合は、「スタイルとテンプレート」のトピックで例と詳細な説明を参照してださい。

独自のコントロールを作成する場合は、「コントロールの作成の概要」の「カスタム コントロールの作成」を参照してください。

ControlTemplate は、外部のユーザーやオブジェクト (スタイルなど) からは見えない実装仕様を自己完結的なユニットにしたものです。 コントロール テンプレートのコンテンツは、同じコントロール テンプレート内からのみ操作できます。

Button ControlTemplate を設定する ButtonStyle を次に示します。


<Style TargetType="Button">
  <!--Set to true to not get any properties from the themes.-->
  <Setter Property="OverridesDefaultStyle" Value="True"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid>
          <Ellipse Fill="{TemplateBinding Background}"/>
          <ContentPresenter HorizontalAlignment="Center"
                            VerticalAlignment="Center"/>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>


これが適用されると、ButtonEllipse として表示されます。

ボタン ControlTemplate のサンプル

上の例のように ControlTemplate プロパティを新しい ControlTemplate に設定すると、テンプレート全体を置き換えることになります。 Button にフォーカスがある状態または押された状態でどのように見えるかはすべて、置き換えるボタンの既定の外観の一部です。 このため、次の例に示すように、ボタンが押された場合の外観などは、必要に応じて定義に含めることができます。


<Style TargetType="Button">
  <Setter Property="SnapsToDevicePixels"
          Value="true" />
  <Setter Property="OverridesDefaultStyle"
          Value="true" />
  <Setter Property="FocusVisualStyle"
          Value="{StaticResource ButtonFocusVisual}" />
  <Setter Property="MinHeight"
          Value="23" />
  <Setter Property="MinWidth"
          Value="75" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Border TextBlock.Foreground="{TemplateBinding Foreground}"
                x:Name="Border"
                CornerRadius="2"
                BorderThickness="1">
          <Border.BorderBrush>
            <LinearGradientBrush StartPoint="0,0"
                                 EndPoint="0,1">
              <LinearGradientBrush.GradientStops>
                <GradientStopCollection>
                  <GradientStop Color="{DynamicResource BorderLightColor}"
                                Offset="0.0" />
                  <GradientStop Color="{DynamicResource BorderDarkColor}"
                                Offset="1.0" />
                </GradientStopCollection>
              </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>

          </Border.BorderBrush>
          <Border.Background>
            <LinearGradientBrush EndPoint="0.5,1"
                                 StartPoint="0.5,0">
              <GradientStop Color="{DynamicResource ControlLightColor}"
                            Offset="0" />
              <GradientStop Color="{DynamicResource ControlMediumColor}"
                            Offset="1" />
            </LinearGradientBrush>
          </Border.Background>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:0.5" />
                <VisualTransition GeneratedDuration="0"
                                  To="Pressed" />
              </VisualStateGroup.Transitions>
              <VisualState x:Name="Normal" />
              <VisualState x:Name="MouseOver">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource ControlMouseOverColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="Pressed">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource ControlPressedColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[0].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource PressedBorderDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource PressedBorderLightColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="Disabled">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledControlDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames
                      Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledForegroundColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledBorderDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <ContentPresenter Margin="2"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            RecognizesAccessKey="True" />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsDefault"
                   Value="true">

            <Setter TargetName="Border"
                    Property="BorderBrush">
              <Setter.Value>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="0,1">
                  <GradientBrush.GradientStops>
                    <GradientStopCollection>
                      <GradientStop Color="{DynamicResource DefaultBorderBrushLightBrush}"
                                    Offset="0.0" />
                      <GradientStop Color="{DynamicResource DefaultBorderBrushDarkColor}"
                                    Offset="1.0" />
                    </GradientStopCollection>
                  </GradientBrush.GradientStops>
                </LinearGradientBrush>

              </Setter.Value>
            </Setter>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>


この例では、ここに示されていないリソースも参照されています。 サンプル全体については、ControlTemplate を使用したスタイル設定のサンプルを参照してください。 このサンプルには多数のコントロールに対応したコントロール テンプレートの例が示されています。コントロール テンプレートを作成する場合は、このサンプルに基づいて作成することをお勧めします。

.NET Framework

サポート対象: 4、3.5、3.0

.NET Framework Client Profile

サポート対象: 4、3.5 SP1

Windows 7, Windows Vista SP1 以降, Windows XP SP3, Windows Server 2008 (Server Core はサポート対象外), Windows Server 2008 R2 (SP1 以降で Server Core をサポート), Windows Server 2003 SP2

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。 サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。 インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

コミュニティの追加

追加
表示:
© 2016 Microsoft