2009-06-22 13 views
39

taban sınıfına ayarlamak WPF'de biraz dolaştım ve Penceremdeki tüm öğelerin aynı marjı paylaşmasını istedim.Bir stilin TargetType özelliğini

<Window.Resources> 
<Style TargetType="{x:Type FrameworkElement}"> 
    <Setter Property="Margin" Value="10" /> 
</Style> 
</Window.Resources> 

Ve bu işe yaramazsa: bir marja sahip yeteneğine sahip tüm Kontroller FrameworkElement kaynaklanıyor buldum böylece aşağıdaki çalıştı. Bunu, tüm Düğmelere uygulayabilirim ancak Düğmeden türetilen tüm Öğelere uygulanamaz. Bir şey mi eksik ya da bu mümkün değil mi?

WPF için CSS kullanmaktan hoşlanan tek kişi iyi bir fikir olabilir mi?

+2

Bu eski bir yazı olduğunu biliyorum ama sen tek değilsin. CSS mükemmel değildir, ancak CSS'den _worse_ olmayan bir şey kullanmak iyi bir fikir olurdu. –

cevap

54

Maalesef, StillerElement türünün tabanına stil uygulayamazsınız; WPF stili yazmanıza izin verirken, onu bundan kaynaklanan denetimlere uygulayamaz. Bu, aynı zamanda, FrameworkElement'in alt türleri için de geçerlidir. ButtonBase, Button/ToggleButton/RepeatButton'un süper tipi.

Hala devralmayı kullanabilirsiniz, ancak uygulamak istediğiniz denetim türlerine uygulamak için açık BasedOn sözdizimini kullanmanız gerekir.

<Window.Resources> 
    <Style TargetType="{x:Type FrameworkElement}"> 
     <Setter Property="Margin" Value="10" /> 
    </Style> 

    <Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type FrameworkElement}}" /> 
    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type FrameworkElement}}" /> 
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type FrameworkElement}}" /> 

</Window.Resources> 

+1

Teşekkürler. Bunu da düşündüm, ancak bir pencerede bulunan TÜM elemanlara uygulanacak bir stili tercih edersem çok yavaş geliyor. – Tigraine

+4

Burada çalışmıyor. TargetType'ın diğer türle eşleşmediğini söyleyen bir XamlParseException alıyorum. Düğme türetilmiş sınıfım ve normal Düğmemde denedim. – ygoe

+1

Uygulamadaki TÜM denetimlere genel stil uygulamak için daha iyi bir yol var mı? – Shimmy

7

mesele bir stil ararken WPF geçerli bir türediği tüm sınıflar arasında arama olmamasıdır. Ancak stili bir anahtar verebilir ve ortak bir mülke sahip olmak istediğiniz tüm öğelere uygulayabilirsiniz. Stilde, stil oluşturduğunuz öğeye uygulanamayan bir özellik belirtilirse, yoksayılır.

İlgili konular