2010-07-31 21 views
6

WPF UserControl'üm iki yığın paneli içerir ve bunların her biri etiket, metin kutusu ve radyo düğmelerini içerir.
Center için VerticalAlignment özelliğini UserControl'teki tüm denetimlere mümkün olduğunca az kodla ayarlamak istiyorum.VerticalAlignment özelliğini tüm denetimlere ayarlama

Şimdi aşağıdaki çözümleri vardır:

  • kaba kuvvet -
  • FrameworkElement için bir stil tanımlayabilir ve
  • kullanıcı kumanda üzerindeki kontrollerin her türü için stiller tanımlamak doğrudan geçerli olduğu her kontrolde VerticalAlignment="Center" koymak (Bu 3 stil tanımlamasına gereksinim duyar, ancak stili otomatik olarak kontrole uygular)

Bu üç çözümün çok fazla kod gerektirmesi gerekir.
Bunu yazmanın başka bir yolu var mı?
FrameworkElement için tanımlama stilinin özelliği otomatik olarak özelliği tüm denetimlere ayarlayacağını umdu, ancak çalışmaz. İşte

(Ben ikinci çok benzer yığın paneli atlanmıştır) benim şimdiki XAML snippet'idir:

<UserControl.Resources> 
    <Style x:Key="BaseStyle" TargetType="FrameworkElement"> 
     <Setter Property="VerticalAlignment" Value="Center" /> 
    </Style> 
</UserControl.Resources> 
<Grid> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Style="{StaticResource BaseStyle}" Text="Value:" /> 
     <RadioButton Style="{StaticResource BaseStyle}">Standard</RadioButton> 
     <RadioButton Style="{StaticResource BaseStyle}">Other</RadioButton> 
     <TextBox Style="{StaticResource BaseStyle}" Width="40"/> 
    </StackPanel> 
</Grid> 

Düzenleme:
Re Will'in comment: Gerçekten codebehind kod biçimlendirme kontrolünü yazma fikrinden nefret . Bu gerçekten basit kullanıcı kontrolü için XAML yeterli olmalıdır.

Re nereye Muad'Dib comment: Benim kullanıcı denetiminde kullanmak Kontroller FrameworkElement türetilmiştir, bu nedenle bu burada bir sorun değildir.

+0

olacaktır: Bu "en iyi" yoludur, ancak baz tarzı miras sayfadaki her denetim için ayrı stiller yaratarak ardından taban stilini tanımlayan ve tarafından yönetmek kolay oldu emin değilim arkasından gelen kodlar, düşündüğüm kadar tuhaf bir fikir olabilir mi? –

+0

tüm denetimler FrameworkElement –

cevap

9

Ben de bir süre önce aynı şeybeyi geçtim. Bu ayarı

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="500" Height="300" Background="OrangeRed"> 

<Page.Resources> 
    <Style TargetType="FrameworkElement" x:Key="BaseStyle"> 
    <Setter Property="VerticalAlignment" Value="Center" /> 
    <Setter Property="Margin" Value="0,0,5,0" /> 
    </Style> 

    <Style TargetType="TextBlock" BasedOn="{StaticResource BaseStyle}" /> 
    <Style TargetType="RadioButton" BasedOn="{StaticResource BaseStyle}" /> 
    <Style TargetType="TextBox" BasedOn="{StaticResource BaseStyle}" /> 
</Page.Resources> 

<Grid> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="Value:" /> 
     <RadioButton>Standard</RadioButton> 
     <RadioButton>Other</RadioButton> 
     <TextBox Width="75"/> 
    </StackPanel> 
</Grid> 

</Page> 
+0

Yep'ten değil, kaynaklarda üç satır daha fazladır, ancak denetimlerde daha az dağınıklık. Geçerli kodumdan daha iyi görünüyor. – zendar

İlgili konular