Style Kelas

Definisi

Berisi setter properti yang dapat dibagikan antar instans jenis. Gaya biasanya dideklarasikan dalam kumpulan sumber daya sehingga dapat dibagikan dan digunakan untuk menerapkan templat kontrol dan gaya lainnya.

public ref class Style sealed : DependencyObject
/// [Windows.Foundation.Metadata.Activatable(Windows.UI.Xaml.IStyleFactory, 65536, Windows.Foundation.UniversalApiContract)]
/// [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)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="Setters")]
class Style final : DependencyObject
/// [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.UI.Xaml.Markup.ContentProperty(Name="Setters")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
/// [Windows.Foundation.Metadata.Activatable(Windows.UI.Xaml.IStyleFactory, 65536, "Windows.Foundation.UniversalApiContract")]
class Style final : DependencyObject
[Windows.Foundation.Metadata.Activatable(typeof(Windows.UI.Xaml.IStyleFactory), 65536, typeof(Windows.Foundation.UniversalApiContract))]
[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)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="Setters")]
public sealed class Style : DependencyObject
[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.UI.Xaml.Markup.ContentProperty(Name="Setters")]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
[Windows.Foundation.Metadata.Activatable(typeof(Windows.UI.Xaml.IStyleFactory), 65536, "Windows.Foundation.UniversalApiContract")]
public sealed class Style : DependencyObject
Public NotInheritable Class Style
Inherits DependencyObject
<Style .../>
-or-
<Style ...>
  oneOrMoreSetters
</Style>
Warisan
Object Platform::Object IInspectable DependencyObject Style
Atribut

Persyaratan Windows

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

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}. Contohnya 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 untuk Kotak Teks, properti Margin diatur ke 4, yang berarti bahwa Kotak Teks memiliki margin 4 di semua sisi. Untuk mengimbangi panjang TextBlock kedua, yang lebih pendek dari TextBlock pertama karena Nama Belakang membutuhkan lebih sedikit ruang daripada Nama Depan, nilai "6,4,4,4" ditetapkan ke properti Margin pada Kotak Teks kedua. Ini menyebabkan TextBox kedua memiliki margin yang berbeda dari yang ditentukan gaya, sehingga selaras secara horizontal dengan Kotak Teks pertama.

<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 Tombol. Ini kemudian diterapkan sebagai gaya implisit untuk kontrol TextBox dan kontrol Tombol.

<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 Gaya bernama InheritedStyle yang didasarkan pada Gaya bernama BaseStyle. InheritedStyle mewarisi nilai Latar Belakang Kuning dari BaseStyle dan menambahkan nilai Latar Depan Merah.

<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

Gaya pada dasarnya adalah kumpulan pengaturan properti yang diterapkan ke satu atau beberapa instans dari jenis tertentu yang memiliki properti tersebut. Gaya berisi kumpulan satu atau beberapa objek Setter . Setiap Setter memiliki Properti dan Nilai. Properti adalah nama properti elemen tempat gaya diterapkan. Nilai adalah nilai yang diterapkan ke properti .

Untuk menerapkan Gaya, objek target haruslah DependencyObject. Properti yang dirujuk oleh setiap Setter sebagai nilai Properti harus merupakan properti dependensi.

Anda harus mengatur properti TargetType saat membuat Gaya. Jika tidak, pengecualian akan dilemparkan.

Jika Anda menetapkan nilai untuk properti yang sama dalam Gaya 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

Gaya hampir selalu didefinisikan dalam XAML sebagai sumber daya dalam ResourceDictionary.

  • Untuk Gaya 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).
  • Untuk Gaya 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 sertakan dalam Application.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 seperti yang 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.

Windows 8 Jika Anda membuat templat ulang kontrol yang ada di Windows 8 XAML, Terkadang Anda memodifikasi elemen Gaya yang ada dalam file XAML StandardStyles.xaml yang disertakan dalam sebagian besar templat aplikasi awal. StandardStyles.xaml direferensikan oleh file app.xaml templat sebagai file sumber MergedDictionaries . Templat untuk aplikasi yang dimulai dengan Windows 8.1 tidak lagi menggunakan StandardStyles.xaml.

Elemen Gaya yang ditentukan dalam ResourceDictionary tidak diperlukan untuk memiliki atribut x:Key atau atribut x:Name, yang biasanya merupakan persyaratan untuk menjadi sumber daya XAML. Gaya 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 bisa menggunakan Setter dalam Gaya 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 Gaya biasa. Nilai untuk Setter dengan Property="Template" hampir selalu ditentukan sebagai elemen properti yang berisi elemen objek ControlTemplate.

Saat Gaya digunakan untuk menentukan templat kontrol, TargetType dari elemen Style dan TargetType dari elemen ControlTemplate untuk control.Template setter 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 Gaya 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 saat 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 Animasi papan cerita untuk status visual dan templat Kontrol XAML.

Gaya dan perilaku runtime

Anda bisa mengubah nilai properti individual yang telah diatur oleh Gaya 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 Gaya 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 Setters 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, Gaya harus dianggap disegel. Anda dapat mendeteksi status tersegel dengan memeriksa nilai properti IsSealed untuk Gaya. Jika itu benar, maka gaya disegel dan Anda tidak dapat memodifikasi properti atau subnilai Setter di dalamnya. Titik waktu saat gaya digunakan dan disegel juga dapat dideteksi saat objek tempat Gaya 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 mempermudah pengelolaan sumber daya. Setiap gaya hanya mendukung satu gaya BasedOn . Untuk informasi selengkapnya, lihat Kontrol BasedOn atau Gaya.

Gaya implisit

Anda dapat menentukan gaya sewaktu-waktu sehingga Gaya 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 properti TargetType. Jika Anda mengatur gaya secara implisit, gaya hanya diterapkan ke jenis yang cocok dengan TargetType dengan tepat dan bukan ke elemen yang berasal dari nilai TargetType . Misalnya, jika Anda membuat gaya secara implisit untuk semua kontrol ToggleButton di aplikasi Anda, dan aplikasi Anda memiliki kontrol ToggleButton dan CheckBox (CheckBox berasal dari ToggleButton), gaya implisit "ToggleButton" hanya diterapkan ke kontrol ToggleButton .

Catatan tentang sintaks XAML

Setters adalah properti konten XAML untuk Gaya, sehingga Anda dapat menggunakan sintaks pengumpulan implisit seperti <Style><Setter .../><Setter .../></Style>.

Menggunakan kelas Gaya 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 gaya apa pun yang dibuat dalam kode biasanya tersedia 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

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)
IsSealed

Mendapatkan nilai yang menunjukkan apakah gaya bersifat baca-saja dan tidak dapat diubah.

Setters

Mendapatkan koleksi objek Setter .

TargetType

Mendapatkan atau mengatur jenis yang gayanya dimaksudkan. TargetType dapat digunakan untuk mendeklarasikan sumber daya gaya implisit jika tidak ada kunci sumber daya yang ditentukan.

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)

Berlaku untuk

Lihat juga