2010-07-31 15 views
6

My User Control di WPF contiene due pannelli dello stack e ognuno di essi contiene etichette, caselle di testo e pulsanti di opzione.
Desidero impostare la proprietà VerticalAlignment su Center per tutti i controlli nel mio UserControl con il minor numero possibile di codice.Impostazione della proprietà VerticalAlignment su tutti i controlli

ora ho seguenti soluzioni:

  • forza bruta - mettere VerticalAlignment="Center" in ogni controllo
  • definire uno stile per FrameworkElement e applicarlo direttamente
  • definire gli stili per ogni tipo di controlli sul controllo utente (questo richiede 3 definizioni di stile, ma applica automaticamente lo stile al controllo)

Queste tre soluzioni richiedono troppo codice.
C'è qualche altro modo per scrivere questo?
Spero che definire lo stile per FrameworkElement imposterà automaticamente la proprietà a tutti i controlli, ma non funziona.

Ecco frammento del mio XAML corrente (ho omesso la seconda, pannello pila molto simile):

<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:
commento di Re Will: Odio davvero idea di scrivere di controllo formattazione codice codebehind . XAML dovrebbe essere sufficiente per questo controllo utente davvero semplice.

Commento di Re Muad'Dib: I controlli che utilizzo nel controllo utente derivano da FrameworkElement, quindi questo non è un problema qui.

+0

impostazione questo sarebbe attraverso il code-behind essere un'idea orribile come penso che sarebbe? –

+0

non tutti i controlli ereditano da FrameworkElement –

risposta

9

Mi ero già imbattuto nello stesso enigma qualche tempo fa. Non sono sicuro se questo è il modo "migliore", ma era abbastanza facile da gestire definendo il vostro stile di base e quindi la creazione di stili separati per ogni controllo sulla pagina che ha ereditato dalla stile di base:

<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

Sì, tre righe in più in risorse, ma meno confusione nei controlli. Sembra migliore del mio codice attuale. – zendar

Problemi correlati