2012-02-02 26 views
7

Bir WPF düğmesinin şeklini varsayılan yuvarlak dikdörtgenden başka bir şekle (örneğin, bir ok) dönüştürmek istiyorum ancak stilin geri kalanını korumak istiyorum - renk, kenarlık rengi, vurgulu durumları vb. doldurun. Düğmenin diğer tüm normal düğmelerle aynı stillere sahip olmasını istiyorum (ki, Windows'un sürümüne, sistem tema renklerine vb. düğme stili sıfırdan ve doğru koddan doğru renkler).Diğer stilleri değiştirmeden WPF düğmesinin şeklini değiştirin

Bunu yapmanın bir yolu var mı?

cevap

0

default Button Template'un bir kopyasını alın ve varsayılan panosu kendi özel şeklinizle değiştirin.

Düğme durumunda, Border'u bir Ok tanımlayan Path gibi bir şeyle değiştirmeniz gerektiği anlaşılıyor.

Path içeriği içermediğinden, hem şekli hem de içeriği bir Grid gibi nesnelerin çakışmasına izin veren başka bir panele yerleştirmeniz gerekecektir.

Yani sonuç yerine Normal düğme denetimi alt sınıfı gerekir varsayılan

<Button> 
    <ContentPresenter /> 
</Button> 
+1

"Varsayılan düğme şablonu" nı nasıl alabilirim? Bağladığınız MSDN makalesinde bir * örnek * şablonu vardır, ancak bu varsayılan değer değildir. –

+1

@HenryJackson Sanırım renkler dışında bir tane var. Varsayılan olarak, renkleri SystemColors'dan çeker. Başka bir alternatif, Expression Blend'de şablonun bir kopyasını yapmaktır. – Rachel

1

bu

<Grid> 
    <Path /> 
    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
</Grid> 

gibi bir şey olacaktır. Alt sınıflanmış düğmeyi özel bir şekille özelleştirebilirsiniz, ancak diğer tüm özellikler miras alınacaktır. Bu, düğmenizin şeklini ve başka hiçbir şeyi değiştirmenize izin verir.
http://msdn.microsoft.com/en-us/library/bb613598.aspx

+0

Bana sadece sınırı nasıl geçersiz kılacağınıza dair bir örnek verebilir misiniz? MSDN makalesinde, Blend'de sıfırdan bir temanın nasıl oluşturulacağı gösteriliyor. –

0

Eğer düğme Template içinde TemplateBinding s kullanabileceğiniz bir Button için varsayılan sistem renkleri/stilleri miras isterseniz: Eğer Blend varsa

İşte özel bir düğme oluşturmak için iyi bir kaynaktır. Ancak

<Button> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <Grid> 
       <!-- circle to have inherited colour --> 
       <Ellipse Fill="{TemplateBinding Background}" Height="50" Width="50" /> 
       <ContentPresenter /> 
      </Grid> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

Ellipse sonra Button arka plan rengini devralır: Sistem aynı arka plan rengi vardı özel şekilli düğme oluşturmak istiyorsa Örneğin, aşağıda kullanabilirsiniz ayarlandı.

+0

Bu, arka plan rengini doğru şekilde alır, ancak aksi halde yalnızca bir daire. Kenarlık yok, vurgulu ya da tıklama durumu yok, içerik üzerinde degrade parlaklık yok. Bütün bir butonu sıfırdan yapmaktan kaçınmaya çalışıyorum. –

İlgili konular