Cara menargetkan semua kontrol (Gaya WPF)


90

Bisakah saya menentukan gaya yang berlaku untuk semua elemen? Saya mencoba

<Style TargetType="Control">
    <Setter Property="Margin" Value="0,5" />
</Style>

Tapi itu tidak melakukan apa-apa

Jawaban:


120

The StyleAnda buat hanya menargetkan Controldan tidak unsur-unsur yang berasal dari Control. Ketika Anda tidak menyetelnya, x:Keyitu secara implisit disetel ke TargetType, jadi dalam kasus Andax:Key="{x:Type Control}" .

Tidak ada cara langsung untuk menentukan Styleyang menargetkan semua elemen yang berasal dari TargetTypedari Style. Anda memiliki beberapa opsi lain.

Jika Anda memiliki yang berikut ini Style

<Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}">
    <Setter Property="Margin" Value="50" />
</Style>

Anda dapat menargetkan semua Buttonsmisalnya

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/>

atau gunakan gaya secara langsung pada elemen apa pun, mis Button

<Button Style="{StaticResource ControlBaseStyle}" ...>

Saya bertanya-tanya mengapa gaya saya dengan tipe target FrameworkElementtidak diterapkan ke semua kontrol saya - ini menjawab pertanyaan itu!
qJake

4
Apakah benar-benar jelek, bahwa saya harus menentukan gaya untuk semua jenis kontrol yang ditempatkan di jendela, tidak hanya untuk beberapa hal root yang umum untuk semua ???
Ondřej

7

Seperti yang dijawab Fredrik Hedblad, Anda dapat mempengaruhi semua elemen yang diwarisi dari kontrol.

Tetapi Anda tidak dapat menerapkan gaya untuk textblock dan tombol dengan gaya yang sama misalnya.

untuk melakukannya:

    <Style x:Key="DefaultStyle" TargetType="{x:Type FrameworkElement}">
        <Setter Property="Control.Margin" Value="50"/>
    </Style>
    <Style TargetType="TextBlock" BasedOn="{StaticResource DefaultStyle}"/>
    <Style TargetType="Button" BasedOn="{StaticResource DefaultStyle}"/>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.