2011-01-05 31 views
1

Ich referenziere ExpressionDark.xaml aus meiner App.xaml, die funktioniert gut, aber wenn ich versuche, einen ItemContainerStyle in einem ItemsControl zu verwenden, werden die Elemente in ItemsControl auf das grundlegende Styling zurückgesetzt.ItemContainerStyle überschreiben Generic style

<ItemsControl Grid.Column="1" VerticalAlignment="Center" Margin="10"> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Margin" Value="5" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.Items> 
     <TextBlock Text="{Binding Error}" /> 
     <TextBox Text="{Binding Path=Username,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{StaticResource validationTemplate}"></TextBox> 
     <TextBox Text="{Binding Path=Password,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{StaticResource validationTemplate}"></TextBox> 
     <Button VerticalAlignment="Center" HorizontalAlignment="Right" Command="{Binding SignInCommand}" IsEnabled="{Binding CanSignIn}" Content="Sign In"></Button> 
     <TextBox Text="{Binding Path=Username}"></TextBox> 
    </ItemsControl.Items> 
</ItemsControl> 

Ich versuche nur, eine gute Kontrolle für die vertikale Styling (leicht Hinzufügen Marge zwischen dem einzelnen Posten) zu finden, also vielleicht ist es eine bessere Art und Weise, die nicht den Stil in App.xaml angegeben wird außer Kraft setzen.

TIA

Antwort

0

Sie Art und Weise nutzen Sie die Marge in Ordnung ist, aber wenn man einen anderen Stil verwenden dann die, in der App.xaml, wird es duffently nicht die in App.xaml verwenden.

So funktioniert es in WPF, das Steuerelement verwendet den Stil "am nächsten", und da Sie diesen Stil direkt in das Steuerelement schreiben, verwendet es diesen Stil.

können Sie einen neuen Stil in der app.xaml mit der Eigenschaft, auf der ExpressionDark.xaml basiert ‚BaseOn‘ machen, aber Sie werden das Hinzufügen:

<ItemsControl.ItemContainerStyle> 
    <Style> 
     <Setter Property="Margin" Value="5" /> 
    </Style> 
</ItemsControl.ItemContainerStyle> 
+0

Aber welche Eigenschaft wäre das 'BasedOn'? Ich hätte nicht gedacht, dass ExpressionDark.xaml irgendein ItemContainerStyle spezifiziert? – Ian

+0

Hmm, vielleicht habe ich Sie missverstanden, ich dachte, dass ExpressionDark.xaml ein Stil war ... Wenn es ist, oder wenn es einen Stil enthält, können Sie diesem Stil einen Schlüssel geben, und der "BasedOn" würde diesen Schlüssel bekommen. dann fügen Sie den Objektcontainer Property Setter hinzu. – Notter

2

Wenn Sie angeben, eine „anstelle“ -Stil, es wird als ein völlig neuer Stil betrachtet. Aus diesem Grund ist der Standardstil von ExpressionDark.xaml für dieses Element vergessen.

Was Sie tun müssen, um dies zu vermeiden ist: Siehe Basis Stil mit BasedOn =

<ItemsControl.ItemContainerStyle> 
    <Style BasedOn="{StaticResource Existing}"> 
     <Setter Property="Margin" Value="5" /> 
    </Style> 
</ItemsControl.ItemContainerStyle> 

den entsprechenden Standardstil für Ihre Steuerung finden. Und ersetzen Sie Existing durch den Resource-Key von ExpressionDark.xaml. Sie können es erkennen, weil es den richtigen TargetType Eigenschaftssatz haben wird:

<Style TargetType="{x:Type ListBoxItem}"> x:Key=... 

Wo ListBoxItem Ihre Steuerung in Betrieb ist (neu gestaltet werden)

Sie können prüfen, ListBox statt ItemsControl verwendet, wie es ListBoxItem hat als Container.