2010-07-31 7 views
6

Mein WPF-Benutzersteuerelement enthält zwei Stapelpanels, von denen jedes Beschriftungen, Textfelder und Optionsfelder enthält.
Ich möchte VerticalAlignment Eigenschaft auf Center auf alle Steuerelemente in meinem UserControl mit so wenig Code wie möglich festlegen.Festlegen der VerticalAlignment-Eigenschaft für alle Steuerelemente

Jetzt habe ich folgende Lösungen:

  • Brute-Force - setzen VerticalAlignment="Center" in jedem Steuer
  • einen Stil für FrameworkElement definieren und wenden sie direkt
  • Stile definieren für jeden Typ der Steuerelemente auf Benutzerkontrolle (Dies erfordert 3 Stildefinitionen, wendet aber automatisch Stil auf das Steuerelement an.)

Diese drei Lösungen benötigen zu viel Code.
Gibt es eine andere Möglichkeit, dies zu schreiben?
Ich hoffte, dass die Definition von Stil für FrameworkElement automatisch die Eigenschaft für alle Steuerelemente festlegen würde, aber es funktioniert nicht.

Hier Schnipsel meines aktuellen XAML (I weggelassen zweiten, sehr ähnlich Stapelplatte):

<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> 

Edit:
Re Wills Kommentar: Ich hasse Idee wirklich die Kontrolle über das Schreiben in Code-Behind-Formatierung Code . XAML sollte für diese wirklich einfache Benutzerkontrolle ausreichen.

Re Muad'Dibs Kommentar: Steuerelemente, die ich in meinem Benutzersteuerelement verwende, stammen von FrameworkElement, also ist dies hier kein Problem.

+0

würde diese Einstellung in der Code-Behind sein, wie eine scheußliche Idee, wie ich denke, würde es? –

+0

nicht alle Steuerelemente erben von FrameworkElement –

Antwort

9

Ich war schon vor einer Weile auf das gleiche Rätsel gestoßen. Nicht sicher, ob dies die „beste“ Art und Weise, aber es war genug, um leicht durch die Definition Ihres Basis-Stils zu verwalten und dann die Schaffung separate Stile für jedes Steuerelement auf der Seite, die von dem Basis-Stil geerbt:

<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

Ja, drei Zeilen mehr Ressourcen, aber weniger Unordnung in den Steuerelementen. Sieht besser aus als mein aktueller Code. – zendar

Verwandte Themen