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 masing-masing 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. Style
Bahkan yang digunakan sebagai nilai sebaris dari properti FrameworkElement.Style memerlukan nilai eksplisitTargetType
.
Cara umum untuk menentukan TargetType
nilai adalah melalui atribut XAML pada elemen Gaya . 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 akan diperlukan untuk merujuk ke jenis melalui penggunaan elemen XAML harus disertakan dalam TargetType
nilai atribut. Misalnya, jika gaya menargetkan jenis kustom, yang ditentukan dalam namespace kode yang dipetakan ke awalan "lokal:", maka TargetType
nilai atribut untuk gaya jenis tersebut harus menyertakan awalan yang sama yang mendahului nama jenis. Perilaku ini diaktifkan oleh perilaku konversi jenis string bawaan di parser XAML Windows Runtime.
Saat menentukan gaya untuk jenis kustom, setelah Anda menyertakan awalan pemetaan untuk TargetType
Anda tidak menyertakan awalan apa pun dalam nilai Propertidari 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 Setter.Property
nilai atribut XAML diharapkan ada pada TargetType
jenis , atau pada kelas leluhur apa pun. Misalnya, jika TargetType
yang Anda tentukan adalah Tombol, dan salah Setter.Property
satu nilai atribut XAML dalam Gaya adalah "Latar Belakang", yang diselesaikan ke properti Control.Background (Kontrol adalah tiga tingkat di atas Tombol dalam pewarisan kelasnya, dan Button
mewarisi semua properti Kontrol). Biasanya menentukan nilai menjadi nama elemen UI yang sama dengan yang akan Anda gunakan dalam markup UI umum, Anda biasanya tidak akan memberi TargetType
nama kelas leluhur (meskipun secara teknis diizinkan).
Jika Gaya menyertakan Setter yang mendeklarasikan templat kontrol (nilai untuk properti Templat ), maka TargetType
nilai 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 dalam aplikasi yang mereferensikan gaya tersebut. Untuk dinyatakan sebagai sumber daya, semua elemen XAML termasuk elemen Style harus memiliki kunci dalam koleksi 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 TargetType
nilai 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 deklarasikan 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
gaya implisit. Kontrol tidak perlu mereferensikan gaya dengan nilai atribut Style dan referensi ekstensi markup {StaticResource} ke kunci untuk mendapatkan perilaku ini, ini 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 TargetType
nilai. Misalnya, jika Anda mendeklarasikan gaya implisit untuk kontrol ToggleButton , dan aplikasi Anda memiliki kontrol CheckBox (CheckBox
berasal dari ToggleButton
), gaya berlaku khusus untuk ToggleButton
kontrol tetapi tidak untuk CheckBox
kontrol.
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 diskrit 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 gaya XAML dan templat Kontrol XAML.
Menggunakan TargetType dalam kode
Pengaturan TargetType
dalam kode jarang. Sistem gaya XAML dimaksudkan untuk digunakan dengan memuat XAML sebagai sumber daya dan memiliki semua aspek gaya 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.
TargetType
Mendapatkan 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 TargetType
nilai 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 C#, jenis TypeName memproyeksikan sebagai System.Type. Saat pemrograman menggunakan C#, Anda biasanya menggunakan typeof
operator untuk mendapatkan referensi ke System.Type
jenis berdasarkan nama jenis sebagai string.
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.
Berlaku untuk
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk