Style Kelas
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.
Berisi setter properti yang dapat dibagikan antar instans jenis.
Style
biasanya dideklarasikan dalam kumpulan sumber daya sehingga dapat dibagikan dan digunakan untuk menerapkan templat kontrol dan gaya lainnya.
public ref class Style sealed : DependencyObject
/// [Microsoft.UI.Xaml.Markup.ContentProperty(Name="Setters")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.Activatable(Microsoft.UI.Xaml.IStyleFactory, 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 Style final : DependencyObject
[Microsoft.UI.Xaml.Markup.ContentProperty(Name="Setters")]
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.Activatable(typeof(Microsoft.UI.Xaml.IStyleFactory), 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 Style : DependencyObject
Public NotInheritable Class Style
Inherits DependencyObject
<Style .../>
-or-
<Style ...>
oneOrMoreSetters
</Style>
- Warisan
- Atribut
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 Style
sebagai ekstensi markup {StaticResource}. Contoh ini juga menunjukkan cara mengambil gaya dari kamus sumber daya dan menerapkannya ke kontrol dalam kode.
Setiap gaya memiliki beberapa bagian Setter . Dalam XAML ini, tidak ada Style.Setters
elemen properti XAML yang muncul. Itu adalah penggunaan umum dalam XAML untuk properti ini. Nilainya Style.Setters
implisit, karena Setters adalah properti konten XAML untuk Gaya. Untuk informasi selengkapnya tentang sintaks XAML dan bagaimana sintaks konten XAML memungkinkan untuk menyiratkan dan menghilangkan elemen XAML tertentu, lihat panduan sintaks XAML.
Perhatikan bahwa dalam gaya Kotak Teks, properti Margin diatur ke 4, yang berarti memiliki TextBox
margin 4 di semua sisi. Untuk mengimbangi panjang TextBlock kedua, yang lebih pendek dari yang pertama TextBlock
karena Nama Belakang membutuhkan lebih sedikit ruang daripada Nama Depan, nilai "6,4,4,4" ditetapkan ke Margin
properti pada yang kedua TextBox
. Ini menyebabkan yang kedua TextBox
memiliki margin yang berbeda dari yang ditentukan gaya, sehingga selaras secara horizontal dengan yang pertama TextBox
.
<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>
private void ShowEmailAddressBox()
{
TextBlock emailAddressLabel = new TextBlock();
emailAddressLabel.Text = "Email:";
emailAddressLabel.Style = (Style)rootPanel.Resources["TextBlockStyle"];
TextBox emailAddressBox = new TextBox();
emailAddressBox.Style = (Style)rootPanel.Resources["TextBoxStyle"];
emailAddressBox.Margin = new Thickness(38, 4, 4, 4);
emailAddressPanel.Children.Add(emailAddressLabel);
emailAddressPanel.Children.Add(emailAddressBox);
}
Contoh ini membuat dua elemen gaya.
TargetType
untuk elemen gaya pertama diatur ke TextBox
dan TargetType
untuk elemen gaya kedua diatur ke Button
. Ini kemudian diterapkan sebagai gaya implisit untuk TextBox
kontrol dan Button
kontrol.
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="Pink" />
<Setter Property="FontSize" Value="15" />
</Style>
<Style TargetType="Button">
<Setter Property="Foreground" Value="Black" />
<Setter Property="Background" Value="Yellow" />
</Style>
</StackPanel.Resources>
<TextBox Height="30" Width="120" Margin="2" Text="TextBoxStyle" />
<Button Height="30" Width="100" Margin="2" Content="ButtonStyle" />
</StackPanel>
Contoh ini membuat bernama Style
InheritedStyle yang didasarkan pada Style
BaseStyle bernama.
InheritedStyle mewarisiBackground
nilai Yellow
dari BaseStyle
dan menambahkan Foreground
nilai Red
.
<StackPanel>
<StackPanel.Resources>
<Style x:Key="BaseStyle" TargetType="Button">
<Setter Property="Background" Value="Yellow" />
</Style>
<!--Create a Style based on BaseStyle-->
<Style x:Key="InheritedStyle" TargetType="Button" BasedOn="{StaticResource BaseStyle}">
<Setter Property="Foreground" Value="Red" />
</Style>
</StackPanel.Resources>
<!--A button with default style-->
<Button Content="HelloWorld" />
<!--A button with base style-->
<Button Content="HelloWorld" Style="{StaticResource BaseStyle}" />
<!--A button with a style that is inherited from the BaseStyle-->
<Button Content="HelloWorld" Style="{StaticResource InheritedStyle}" />
</StackPanel>
Keterangan
Style
pada dasarnya adalah kumpulan pengaturan properti yang diterapkan ke satu atau beberapa instans dari jenis tertentu yang memiliki properti tersebut.
Style
berisi kumpulan satu atau beberapa objek Setter. Masing-masing Setter
memiliki Properti dan Nilai.
Property
adalah nama properti elemen tempat gaya diterapkan.
Value
adalah nilai yang diterapkan ke properti .
Untuk menerapkan Style
, objek target haruslah DependencyObject. Properti yang dirujuk setiap Setter sebagai nilai Properti harus merupakan properti dependensi.
Anda harus mengatur properti TargetType saat membuat Style
. Jika tidak, pengecualian akan dilemparkan.
Jika Anda menetapkan nilai untuk properti yang sama dalam Style
dan juga pada elemen secara langsung, nilai yang ditetapkan pada elemen secara langsung diutamakan. Untuk informasi selengkapnya, lihat Gambaran umum properti dependensi, khususnya bagian "Prioritas nilai properti dependensi".
Menentukan Gaya sebagai sumber daya XAML
Style
hampir selalu didefinisikan dalam XAML sebagai sumber daya dalam ResourceDictionary.
-
Style
Untuk yang hanya digunakan oleh item UI lain yang ditentukan di halaman XAML yang sama, Anda biasanya menentukan Gaya dalam koleksi FrameworkElement.Resources (Page.Resources
jika elemen akar Anda adalah Halaman). -
Style
Untuk yang digunakan oleh lebih dari satu halaman di aplikasi, Anda biasanya menentukan Gaya di koleksi Application.Resources. Atau, Anda mungkin memiliki file XAML terpisah untuk aplikasi yang Anda sertakanApplication.Resources
sebagai nilai MergedDictionaries . - Sebagian besar elemen UI memiliki gaya default yang ditentukan oleh Windows Runtime. Salinan gaya default dapat dilihat dalam file XAML pembantu desain yang disebut generic.xaml, yang secara teknis bukan file sumber daya untuk aplikasi meskipun terstruktur seperti itu. Anda dapat menyalin bagian diskret dari file ini ke XAML aplikasi Anda sebagai titik awal saat Anda mengedit salinan gaya sebagaimana diaktifkan oleh alat, tetapi setelah Anda membuat salinan seperti itu, file tersebut perlu disertakan dalam salah satu koleksi Sumber Daya atau diakses secara tidak langsung melalui MergedDictionaries. Dalam semua kasus ini, XAML yang dimodifikasi yang mengambil alih default disertakan sebagai bagian dari aplikasi Anda.
Style
Elemen yang ditentukan dalam ResourceDictionary tidak diperlukan untuk memiliki atribut x:Key atau atribut x:Name, yang biasanya merupakan persyaratan sebagai sumber daya XAML.
Style
Yang didefinisikan dengan cara ini menggunakan nilai properti TargetType-nya sebagai kunci implisit dan dikenal sebagai gaya implisit.
Untuk informasi selengkapnya tentang cara menggunakan kamus sumber daya XAML, lihat Referensi sumber daya ResourceDictionary dan XAML.
Gaya dan template
Anda dapat menggunakan Setter di Style
untuk menerapkan nilai ke properti dependensi apa pun. Tetapi ini adalah Setter
untuk properti Templat dari kelas turunan Kontrol yang merupakan sebagian besar markup XAML dalam khas Style
.
Nilai untuk Setter
dengan Property="Template"
hampir selalu ditentukan sebagai elemen properti yang berisi elemen objek ControlTemplate.
Style
Saat digunakan untuk menentukan templat kontrol, TargetTypeStyle
elemen dan TargetType elemen ControlTemplate untuk setter Control.Template-nya harus selalu menggunakan nilai yang sama.
Setter templat menentukan definisi antarmuka pengguna templat dasar untuk instans kontrol tempat templat tersebut diterapkan. Ini juga berisi status visual untuk kontrol, dan definisi UI berbasis status lainnya seperti transisi tema default. Untuk kontrol kompleks seperti ListBox, Gaya templat default dan ControlTemplate di dalamnya dapat memiliki ratusan baris XAML. Untuk informasi selengkapnya tentang peran Style
dalam skenario templat kontrol, lihat Templat Kontrol XAML.
Templat untuk kontrol sering menyertakan status visual yang mengubah tampilan kontrol sebagai respons terhadap status logis. Misalnya, Tombol dapat memiliki tampilan visual yang berbeda ketika ditekan dengan menerapkan status visual baru dari templatnya, dan semua perubahan tampilan dapat berasal dari XAML bukan kode. Untuk informasi selengkapnya tentang cara kerja status visual dan cara mengubahnya atau menentukan status untuk kontrol kustom, lihat templat Kontrol XAML.
Gaya dan perilaku runtime
Anda dapat mengubah nilai properti individual yang telah ditetapkan oleh Style
pada durasi dan nilai baru Anda menimpa nilai Setters . Misalnya, Anda dapat mengatur properti Templat pada durasi meskipun properti ini telah diatur oleh gaya.
Anda dapat menyesuaikan properti Style
pada durasi, tetapi hanya jika gaya tersebut belum diterapkan ke apa pun, dan hanya ada sebagai sumber daya yang tidak digunakan secara implisit. Misalnya, Anda dapat menambahkan setter ke koleksi di Setter untuk gaya yang ada di Sumber Daya dengan atribut x:Key tetapi tidak memiliki nilai ekstensi markup {StaticResource} di tempat lain di XAML yang mengacu pada gaya tersebut. Namun, segera setelah Gaya direferensikan dan digunakan untuk nilai oleh objek yang dimuat, Style
harus dianggap disegel. Anda dapat mendeteksi status tersegel dengan memeriksa nilai properti IsSealed untuk Style
. Jika adalah true
, maka gaya disegel dan Anda tidak dapat memodifikasi properti apa pun atau subvalue Setter di dalamnya. Titik waktu ketika gaya digunakan dan disegel juga dapat dideteksi ketika objek di mana Style
direferensikan menaikkan peristiwa Dimuat .
Gaya BasedOn
Anda dapat membuat gaya baru berdasarkan gaya yang sudah ada yang ditentukan oleh aplikasi Anda atau dengan gaya default untuk kontrol Windows Runtime. Anda dapat melakukan ini menggunakan properti BasedOn . Ini mengurangi duplikasi di XAML Anda dan memudahkan pengelolaan sumber daya. Setiap gaya hanya mendukung satu BasedOn
gaya. Untuk informasi selengkapnya, lihat Kontrol BasedOn atau Gaya.
Gaya implisit
Anda dapat menentukan gaya sewaktu-waktu sehingga Style
digunakan secara implisit oleh semua objek dari TargetType yang sama, tanpa mengharuskan setiap instans objek tersebut untuk secara khusus mereferensikan Gaya sebagai nilai FrameworkElement.Style .
<Style>
Saat sumber daya dideklarasikan dalam ResourceDictionary tanpa atribut x:Key, nilai x:Key menggunakan nilai TargetType
properti . Jika Anda mengatur gaya secara implisit, gaya hanya diterapkan ke jenis yang cocok TargetType
dengan persis dan bukan ke elemen yang berasal dari TargetType
nilai. Misalnya, jika Anda membuat gaya secara implisit untuk semua kontrol ToggleButton di aplikasi Anda, dan aplikasi Anda memiliki ToggleButton
kontrol dan CheckBox (CheckBox
berasal dari ToggleButton
), gaya implisit "ToggleButton" hanya diterapkan ke ToggleButton
kontrol.
Catatan tentang sintaks XAML
Setters adalah properti konten XAML untuk Style
, sehingga Anda dapat menggunakan sintaks pengumpulan implisit seperti <Style><Setter .../><Setter .../></Style>
.
Style
Menggunakan kelas dalam kode (misalnya memanggil konstruktor dan membangun nilai Setter satu per satu) sangat jarang terjadi. Gaya digunakan untuk templat, dan templat harus tersedia pada waktu pemuatan XAML, sehingga setiap yang Style
dibuat dalam kode biasanya tersedia terlalu terlambat untuk diterapkan ke kontrol di UI.
Konstruktor
Style() |
Menginisialisasi instans baru kelas Gaya , tanpa TargetType awal dan koleksi Setters kosong. |
Style(TypeName) |
Menginisialisasi instans baru kelas Gaya , dengan TargetType awal yang ditentukan dan koleksi Setters kosong. |
Properti
BasedOn |
Mendapatkan atau mengatur gaya yang ditentukan yang merupakan dasar dari gaya saat ini. |
Dispatcher |
Selalu kembali |
DispatcherQueue |
|
IsSealed |
Mendapatkan nilai yang menunjukkan apakah gaya bersifat baca-saja dan tidak dapat diubah. |
Setters |
Mendapatkan kumpulan objek Setter . |
TargetType |
Mendapatkan atau mengatur jenis yang gayanya dimaksudkan.
|
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) |
Seal() |
Mengunci gaya sehingga properti TargetType atau Setter apa pun di koleksi Setters tidak dapat diubah. |
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) |