ControlTemplate Kelas

Definisi

Menentukan pohon elemen yang digunakan sebagai templat kontrol untuk kontrol.

public ref class ControlTemplate sealed : FrameworkTemplate
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class ControlTemplate final : FrameworkTemplate
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ControlTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class ControlTemplate : FrameworkTemplate
Public NotInheritable Class ControlTemplate
Inherits FrameworkTemplate
<ControlTemplate ...>
    templateRootElement
</ControlTemplate>
Warisan
Object Platform::Object IInspectable DependencyObject FrameworkTemplate ControlTemplate
Atribut

Persyaratan Windows

Rangkaian perangkat
Windows 10 (diperkenalkan dalam 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v1.0)

Contoh

Contoh berikut membuat ControlTemplate sederhana untuk Tombol. Templat kontrol berisi satu Kisi dan menentukan perilaku ini:

  • Ketika pengguna meletakkan mouse di atas Tombol, Grid berubah dari hijau menjadi merah selama satu setengah detik.
  • Ketika pengguna menjauhkan mouse dari tombol, Grid segera berubah kembali menjadi hijau.
<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>

Anda dapat melihat templat lengkap untuk setiap kontrol XAML dalam file generic.xaml . File ini ditemukan di folder (File Program)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP<SDK version>\Generic.

Keterangan

Untuk informasi dan contoh selengkapnya, lihat templat kontrol XAML.

ControlTemplate digunakan sebagai nilai properti Control.Template , yang menentukan visual kontrol dengan menerapkan templat. Anda hampir selalu mendefinisikan ControlTemplate sebagai sumber daya XAML, menggunakan kunci implisit TargetType yang sama dengan Gaya yang mengatur Control.Template dengan Setter. Anda jarang menetapkan nilai untuk Control.Template langsung pada instans kontrol.

Benar-benar hanya ada dua properti yang Anda gunakan saat menentukan ControlTemplate: TargetType, dan konten XAML implisit. ControlTemplate mewarisi perilaku konten XAML implisit dari induk FrameworkTemplate-nya . Pada dasarnya elemen yang terkandung dalam ControlTemplate seperti yang didefinisikan dalam XAML menetapkan elemen akar untuk struktur lebih lanjut dari elemen XAML yang menentukan templat. Ini mengatur properti "Templat" yang kemudian tidak dapat diperiksa oleh kode dan hanya memiliki arti tentang bagaimana pengurai XAML menetapkan konten untuk kontrol berdasarkan penerapan templat tersebut.

Agar kontennya diatur dari ControlTemplate, elemen kontrol harus merupakan subkelas Kontrol yang benar, sehingga memiliki properti Control.Template . Ada kasus lain di mana templat menerapkan konten tetapi ini biasanya melibatkan salah satu kelas templat turunan FrameworkTemplate lainnya (DataTemplate atau ItemsPanelTemplate).

Templat kontrol menyediakan visual dan bagian yang membentuk instans kontrol seperti yang muncul di UI aplikasi. Pada durasi, templat telah diterapkan, sehingga semua bagian yang dibuat di luar templat sekarang benar-benar menjadi bagian dari kontrol, dan dapat diakses dengan teknik seperti memeriksa namescope XAML dari dalam konten kontrol atau menggunakan kelas VisualTreeHelper . Peristiwa seperti peristiwa input terkadang mengekspos bagian kontrol yang berasal dari templat kontrol yang diterapkan.

Ada cara untuk mengakses konten yang ditentukan templat baik sebelum atau sesudah templat diterapkan ke instans kontrol tertentu; lihat OnApplyTemplate atau GetTemplateChild.

Titik waktu aktual bahwa ControlTemplate diterapkan ke instans kontrol dapat dideteksi karena ini memanggil metode virtual yang dilindungi OnApplyTemplate . Selama kontrol tidak disegel, Anda dapat mensubkelas kontrol sehingga Anda memiliki kesempatan untuk mengambil alih OnApplyTemplate. Penimpaan ini dapat ditulis untuk melakukan tindakan yang tidak akan dimungkinkan sebelum templat diterapkan. Misalnya, Anda dapat menyambungkan penanganan aktivitas untuk mengontrol bagian, atau mengatur properti kontrol ke bagian objek referensi yang dibuat dari templat tetapi tidak dimulai dengan nilai ekstensi markup {TemplateBinding} .

Konstruktor

ControlTemplate()

Menginisialisasi instans baru kelas ControlTemplate .

Properti

Dispatcher

Mendapatkan CoreDispatcher yang dikaitkan dengan objek ini. CoreDispatcher mewakili fasilitas yang dapat mengakses DependencyObject pada utas UI bahkan jika kode dimulai oleh utas non-UI.

(Diperoleh dari DependencyObject)
TargetType

Mendapatkan atau mengatur jenis yang diterapkan ControlTemplate .

Metode

ClearValue(DependencyProperty)

Menghapus nilai lokal properti dependensi.

(Diperoleh dari DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Mengembalikan nilai dasar apa pun yang ditetapkan untuk properti dependensi, yang akan berlaku dalam kasus di mana animasi tidak aktif.

(Diperoleh dari DependencyObject)
GetValue(DependencyProperty)

Mengembalikan nilai efektif properti dependensi saat ini dari DependencyObject.

(Diperoleh dari DependencyObject)
ReadLocalValue(DependencyProperty)

Mengembalikan nilai lokal properti dependensi, jika nilai lokal ditetapkan.

(Diperoleh dari DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Mendaftarkan fungsi pemberitahuan untuk mendengarkan perubahan pada DependencyProperty tertentu pada instans DependencyObject ini.

(Diperoleh dari DependencyObject)
SetValue(DependencyProperty, Object)

Mengatur nilai lokal properti dependensi pada DependencyObject.

(Diperoleh dari DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Membatalkan pemberitahuan perubahan yang sebelumnya terdaftar dengan memanggil RegisterPropertyChangedCallback.

(Diperoleh dari DependencyObject)

Berlaku untuk

Lihat juga