次の方法で共有


ControlTemplate クラス

定義

コントロールのコントロール テンプレートとして使用される要素ツリーを定義します。

public ref class ControlTemplate sealed : FrameworkTemplate
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ControlTemplate final : FrameworkTemplate
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ControlTemplate : FrameworkTemplate
Public NotInheritable Class ControlTemplate
Inherits FrameworkTemplate
<ControlTemplate ...>
    templateRootElement
</ControlTemplate>
継承
Object Platform::Object IInspectable DependencyObject FrameworkTemplate ControlTemplate
属性

次の例では、Button の単純な ControlTemplate を作成 します。 コントロール テンプレートには 1 つの Grid が含まれており、この動作を指定します。

  • ユーザーが ボタンの上にマウスを置くと、 グリッド は 1/5 秒で緑から赤に変わります。
  • ユーザーがボタンからマウスを離すと、 グリッド はすぐに緑色に戻ります。
<ControlTemplate TargetType="Button">
  <Grid >
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">

        <VisualStateGroup.Transitions>

          <!--Take one half second to transition to the PointerOver state.-->
          <VisualTransition To="PointerOver" 
                              GeneratedDuration="0:0:0.5"/>
        </VisualStateGroup.Transitions>
        
        <VisualState x:Name="Normal" />

        <!--Change the SolidColorBrush, ButtonBrush, to red when the
            Pointer is over the button.-->
        <VisualState x:Name="PointerOver">
          <Storyboard>
            <ColorAnimation Storyboard.TargetName="ButtonBrush" 
                            Storyboard.TargetProperty="Color" To="Red" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid.Background>
      <SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
    </Grid.Background>
  </Grid>
</ControlTemplate>

generic.xaml ファイル内の各 XAML コントロールの完全なテンプレートを確認できます。 このファイルは、(Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP<SDK version>\Generic フォルダーにあります。

注釈

詳細と例については、「 XAML コントロール テンプレート」を参照してください。

ControlTemplate は、 Control.Template プロパティの値として使用されます。このプロパティは、テンプレートを適用してコントロールのビジュアルを定義します。 Control.Template と Setter を設定するスタイルと同じ暗黙的なキー TargetType を使用して、ほとんどの場合、ControlTemplate を XAML リソースとして定義します。 Control.Template の値をコントロール インスタンスに直接割り当てることはほとんどありません。

ControlTemplate を定義するときに使用するプロパティは、 TargetType と暗黙的な XAML コンテンツの 2 つだけです。 ControlTemplate は、 その FrameworkTemplate 親から暗黙的な XAML コンテンツの動作を継承します。 基本的に、XAML で定義されている ControlTemplate 内に含まれる要素は、テンプレートを定義する XAML 要素のそれ以上の構造にルート要素を割り当てます。 これは、後でコードで調べることができない "Template" プロパティを設定しており、XAML パーサーがそのテンプレートの適用に基づいてコントロールのコンテンツを割り当てる方法についてのみ意味を持ちます。

そのコンテンツを ControlTemplate から設定するには、Control.Template プロパティを持つコントロール要素が true の Control サブクラスである必要があります。 テンプレートがコンテンツを適用する場合は他にもありますが、これには通常、他の FrameworkTemplate 派生テンプレート クラス (DataTemplate または ItemsPanelTemplate) のいずれかが含まれます。

コントロール テンプレートは、アプリの UI に表示されるコントロールのインスタンスを構成するビジュアルとパーツを提供します。 実行時に、テンプレートは既に適用されているため、テンプレートから作成されたすべての部分は、本当にコントロールの一部になり、コントロール コンテンツ内から XAML 名前スコープを調べたり 、VisualTreeHelper クラスを使用したりするなどの手法でアクセスできます。 入力イベントなどのイベントは、適用されたコントロール テンプレートから取得されたコントロールの一部を公開する場合があります。

テンプレートが特定のコントロール インスタンスに適用される前または後に、テンプレート定義のコンテンツにアクセスする方法があります。 「OnApplyTemplate 」または 「GetTemplateChild」を参照してください

ControlTemplate がコントロール インスタンスに適用される実際の時点は、 OnApplyTemplate で保護された仮想メソッドを呼び出すので検出できます。 コントロールがシールされていない限り、 OnApplyTemplate をオーバーライドできるようにコントロールをサブクラス化できます。 このオーバーライドは、テンプレートが適用される前に不可能なアクションを実行するように記述できます。 たとえば、イベント ハンドラーをワイヤリングしてパーツを制御したり、コントロール プロパティを設定して、テンプレートから作成されたが {TemplateBinding} マークアップ拡張 値で始まらなかったオブジェクト パーツを参照したりできます。

コンストラクター

ControlTemplate()

ControlTemplate クラスの新しいインスタンスを初期化します。

プロパティ

Dispatcher

常に Windows アプリ SDK アプリで を返しますnull。 代わりに DispatcherQueue を使用してください。

(継承元 DependencyObject)
DispatcherQueue

このオブジェクトが DispatcherQueue 関連付けられている を取得します。 は DispatcherQueue 、コードが UI 以外のスレッドによって開始された場合でも、UI スレッド上の にアクセス DependencyObject できる機能を表します。

(継承元 DependencyObject)
TargetType

ControlTemplate を適用する型を取得または設定します。

メソッド

ClearValue(DependencyProperty)

依存関係プロパティのローカル値をクリアします。

(継承元 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

依存関係プロパティに対して確立された基本値を返します。これは、アニメーションがアクティブでない場合に適用されます。

(継承元 DependencyObject)
GetValue(DependencyProperty)

DependencyObject から依存関係プロパティの現在の有効な値を返します。

(継承元 DependencyObject)
ReadLocalValue(DependencyProperty)

ローカル値が設定されている場合は、依存関係プロパティのローカル値を返します。

(継承元 DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

この DependencyObject インスタンスの特定の DependencyProperty に対する変更をリッスンするための通知関数を登録します。

(継承元 DependencyObject)
SetValue(DependencyProperty, Object)

DependencyObject の依存関係プロパティのローカル値を設定します。

(継承元 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

RegisterPropertyChangedCallback を呼び出して以前に登録した変更通知を取り消します。

(継承元 DependencyObject)

適用対象

こちらもご覧ください