Bagikan melalui


Style Kelas

Definisi

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
Object Platform::Object IInspectable DependencyObject Style
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 StyleInheritedStyle yang didasarkan pada StyleBaseStyle 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 sertakan 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 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 null di aplikasi SDK Aplikasi Windows. Gunakan DispatcherQueue sebagai gantinya.

(Diperoleh dari DependencyObject)
DispatcherQueue

DispatcherQueue Mendapatkan yang dikaitkan dengan objek ini. DispatcherQueue 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 kumpulan 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