Style.TargetType Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendapatkan atau mengatur jenis yang gayanya dimaksudkan. TargetType dapat digunakan untuk mendeklarasikan sumber daya gaya implisit jika tidak ada kunci sumber daya yang ditentukan.
public:
property TypeName TargetType { TypeName get(); void set(TypeName value); };
TypeName TargetType();
void TargetType(TypeName value);
public System.Type TargetType { get; set; }
var typeName = style.targetType;
style.targetType = typeName;
Public Property TargetType As Type
<Style TargetType="typeName"/>
Nilai Properti
Jenis objek tempat gaya diterapkan. Nilai ini biasanya diatur dalam XAML, bukan kode. Lihat Keterangan.
Contoh
Contoh ini membuat dua gaya: satu untuk TextBlock dan satu untuk TextBox. Setiap gaya diterapkan ke dua instans kontrol untuk membuat tampilan seragam untuk setiap TextBlock dan TextBox. Contoh mengatur properti FrameworkElement.Style dari setiap kontrol dengan mereferensikan Gaya sebagai ekstensi markup {StaticResource}.
<StackPanel x:Name="rootPanel">
<StackPanel.Resources>
<!--Create a Style for a TextBlock to specify that the
Foreground equals Navy, FontSize equals 14, and
VerticalAlignment equals Botton.-->
<Style TargetType="TextBlock" x:Key="TextBlockStyle">
<Setter Property="Foreground" Value="Navy"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="VerticalAlignment" Value="Bottom"/>
</Style>
<!--Create a Style for a TextBox that specifies that
the Width is 200, Height is 30, Margin is 4,
Background is LightBlue, and FontSize is 14.-->
<Style TargetType="TextBox" x:Key="TextBoxStyle">
<Setter Property="Width" Value="200"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Margin" Value="4"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<GradientStop Color="White" Offset="0.0"/>
<GradientStop Color="LightBlue" Offset="0.5"/>
<GradientStop Color="Navy" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<!--Apply the TextBlockStyle and TextBoxStyle to each
TextBlock and TextBox, respectively.-->
<StackPanel Orientation="Horizontal">
<TextBlock Text="First Name:" Style="{StaticResource TextBlockStyle}"/>
<TextBox Style="{StaticResource TextBoxStyle}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Last Name:" Style="{StaticResource TextBlockStyle}"/>
<TextBox Style="{StaticResource TextBoxStyle}"
Margin="6,4,4,4"/>
</StackPanel>
<StackPanel x:Name="emailAddressPanel" Orientation="Horizontal"/>
</StackPanel>
Keterangan
Nilai TargetType diperlukan untuk semua kasus di mana Anda menggunakan atau mendeklarasikan Gaya. Tidak ada nilai default. Bahkan Gaya yang digunakan sebagai nilai sebaris properti FrameworkElement.Style memerlukan nilai TargetType eksplisit.
Cara umum untuk menentukan nilai TargetType adalah melalui atribut XAML pada elemen Style . Ketika diatur dalam XAML, arti TargetType dan nilai yang Anda berikan mengambil beberapa aspek tentang bagaimana jenis diwakili dalam XAML.
Untuk XAML, awalan apa pun yang diperlukan untuk merujuk ke jenis melalui penggunaan elemen XAML harus disertakan dalam nilai atribut TargetType. Misalnya, jika gaya menargetkan jenis kustom, yang ditentukan dalam namespace kode yang dipetakan ke awalan "lokal:", nilai atribut TargetType untuk gaya jenis tersebut harus menyertakan awalan yang sama sebelum nama jenis. Perilaku ini diaktifkan oleh perilaku konversi jenis string bawaan di pengurai XAML Windows Runtime.
Saat menentukan gaya untuk jenis kustom, setelah Anda menyertakan awalan pemetaan untuk TargetType, Anda tidak menyertakan awalan apa pun dalam nilai Properti dari Setter mana pun dalam Gaya tersebut.
Nilai yang Anda berikan untuk TargetType memodifikasi perilaku pencarian untuk nilai Setter.Property apa pun yang Anda tentukan dalam gaya. Secara khusus, properti dependensi yang Anda referensikan berdasarkan nama untuk nilai atribut Setter.Property XAML diharapkan ada pada jenis TargetType, atau pada kelas leluhur apa pun. Misalnya, jika TargetType yang Anda tentukan adalah Tombol, dan salah satu nilai atribut Setter.Property XAML dalam Gaya adalah "Latar Belakang", yang diselesaikan ke properti Control.Background (Kontrol adalah tiga tingkat di atas Tombol dalam pewarisan kelasnya, dan Tombol mewarisi semua properti Kontrol). Biasanya untuk menentukan nilai TargetType menjadi nama elemen UI yang sama dengan yang akan Anda gunakan dalam markup UI umum, Anda biasanya tidak akan memberi nama kelas leluhur (meskipun secara teknis diizinkan).
Jika Gaya menyertakan Setter yang mendeklarasikan templat kontrol (nilai untuk properti Templat ), maka nilai TargetType dari Gaya induk harus cocok dengan nilai TargetType dari elemen ControlTemplate yang terkandung.
Gaya implisit
Gaya hampir selalu dinyatakan sebagai sumber daya XAML yang dibagikan dan diterapkan ke setiap elemen UI di aplikasi yang mereferensikan gaya tersebut. Untuk dinyatakan sebagai sumber daya, semua elemen XAML termasuk elemen Style harus memiliki kunci dalam kumpulan sumber daya yang membedakan setiap sumber daya untuk pencarian pada run-time. Elemen Style (dan juga berbagai elemen templat seperti ControlTemplate) mendukung fitur yang disebut gaya implisit. Untuk gaya implisit, nilai yang Anda berikan untuk nilai TargetType juga berfungsi sebagai kunci untuk gaya tersebut dalam cakupan pengumpulan sumber dayanya, dan Anda tidak diharuskan untuk menentukan nilai atribut x:Key . (Sebaliknya, sebagian besar elemen lain yang Anda nyatakan dalam kumpulan sumber daya memang memerlukan nilai atribut x:Key eksplisit dan Anda akan mendapatkan kesalahan waktu desain atau pengurai yang memberlakukan ini.)
Gaya yang dinyatakan menggunakan gaya implisit kemudian digunakan sebagai nilai Gaya untuk instans elemen UI apa pun yang secara khusus adalah jenis yang cocok dengan TargetType dari gaya implisit. Kontrol tidak perlu mereferensikan gaya dengan nilai atribut Style dan referensi ekstensi markup {StaticResource} ke kunci untuk mendapatkan perilaku ini, itu adalah perilaku implisit jika kontrol tersebut cocok dengan jenis gaya implisit yang ada.
Gaya implisit tidak berlaku untuk elemen yang merupakan subjenis dari jenis yang dirujuk sebagai nilai TargetType. Misalnya, jika Anda mendeklarasikan gaya implisit untuk kontrol ToggleButton , dan aplikasi Anda memiliki kontrol CheckBox (CheckBox berasal dari ToggleButton), gaya berlaku khusus untuk kontrol ToggleButton tetapi tidak ke kontrol CheckBox .
Windows Runtime mendefinisikan gaya implisit default untuk setiap elemen antarmuka pengguna praktis yang menjadi bagian dari WINDOWS Runtime API. Ini harus dilakukan karena gaya ini menentukan visual untuk elemen (terutama templat), dan elemen tanpa visual bahkan tidak akan muncul di UI atau berpartisipasi dalam tata letak. Semua gaya implisit ini dapat dilihat dalam file XAML pembantu desain yang disebut generic.xaml. Alat yang Anda gunakan untuk mengedit XAML dapat menyalin bagian diskret dari file ini ke XAML aplikasi Anda sebagai titik awal saat Anda mengedit salinan gaya seperti yang diaktifkan oleh alat. Dalam gaya implisit default, ada banyak lapisan referensi sumber daya, serta dukungan tema menggunakan ekstensi markup {ThemeResource} dan kuas khusus tema atau sumber daya lainnya. Anda dapat mengganti gaya implisit apa pun yang akan berasal dari Windows Runtime menentukan gaya implisit default. Untuk informasi selengkapnya, lihat Mulai Cepat: Kontrol gaya dan Mulai Cepat: Templat kontrol.
Menggunakan TargetType dalam kode
Mengatur TargetType dalam kode jarang terjadi. Sistem gaya XAML dimaksudkan untuk digunakan dengan memuat XAML sebagai sumber daya dan memiliki semua aspek gaya yang siap sebelumnya. Seharusnya ada sangat sedikit skenario di mana Anda tidak akan tahu info tentang cara menata kontrol atau menerapkan gaya hingga runtime, di mana akan ada kebutuhan untuk mengatur TargetType pada Gaya yang dibuat atau direferensikan dalam kode.
Mendapatkan TargetType dalam kode juga jarang terjadi, tetapi mungkin ada beberapa skenario lagi di mana Anda mungkin melakukan ini. Misalnya, mungkin ada sekumpulan sumber daya Gaya bernama yang sudah ditentukan dalam XAML Anda. Tetapi Anda mungkin ingin memeriksa kembali apakah gaya yang akan Anda terapkan ke kontrol memiliki nilai TargetType yang berfungsi untuk jenis kontrol tempat Anda menerapkannya. Jadi, Anda mungkin memiliki kode seperti ini:
private bool VerifyStyle(FrameworkElement scope, String styleKey, Control applyTo)
{
Style styleToCheck = scope.Resources[styleKey] as Style;
if (styleToCheck != null)
{
if (styleToCheck.TargetType == applyTo.GetType())
{
// applyTo.Style = styleToCheck;
return true;
}
}
return false;
}
Tip
Jika Anda memprogram menggunakan bahasa Microsoft .NET (C# atau Microsoft Visual Basic), jenis TypeName diproyeksikan sebagai System.Type. Saat pemrograman menggunakan C#C#, Anda biasanya menggunakan operator typeof untuk mendapatkan referensi ke System.Type jenis berdasarkan nama jenis sebagai string. Di Microsoft Visual Basic, gunakan GetType.
Catatan migrasi
- Jika Anda telah menggunakan XAML untuk Windows Presentation Foundation (WPF), maka Anda mungkin telah menggunakan ekstensi markup x:Type untuk mengisi nilai XAML apa pun yang mengambil System.Type. Pengurai XAML Windows Runtime tidak mendukung x:Type. Sebagai gantinya, Anda harus merujuk ke jenis berdasarkan nama tanpa menggunakan ekstensi markup apa pun, dan konversi jenis XAML-to-backing yang diperlukan sudah ditangani oleh perilaku konversi bawaan di parser XAML.