ControlTemplate Kelas

Definisi

Menentukan pohon elemen yang digunakan sebagai templat kontrol untuk kontrol.

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>
Warisan
Object Platform::Object IInspectable DependencyObject FrameworkTemplate ControlTemplate
Atribut

Contoh

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

  • Ketika pengguna meletakkan mouse di atas Tombol, Kisi berubah dari hijau ke merah selama satu setengah detik.
  • Ketika pengguna memindahkan mouse menjauh dari tombol, Kisi 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 menentukan 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 elemen XAML lebih lanjut 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 sejati, 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 run time, templat telah diterapkan, sehingga semua bagian yang dibuat dari templat sekarang benar-benar bagian dari kontrol, dan dapat diakses oleh 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 menghubungkan 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

Nama Deskripsi
ControlTemplate()

Menginisialisasi instans baru kelas ControlTemplate .

Properti

Nama Deskripsi
Dispatcher

Selalu kembali null di aplikasi SDK Aplikasi Windows. Gunakan DispatcherQueue sebagai gantinya .

(Diperoleh dari DependencyObject)
DispatcherQueue

DispatcherQueue Mendapatkan bahwa objek ini dikaitkan dengan. mewakili DispatcherQueue 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

Nama Deskripsi
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 diatur.

(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