2011-01-05 71 views
1

我从我的App.xaml中引用了ExpressionDark.xaml,该工作正常,但是当我尝试在ItemsControl中使用ItemContainerStyle时,ItemsControl中的项目恢复为基本样式。ItemContainerStyle覆盖泛型

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

我只是试图找到一个垂直造型(轻松添加项目之间保证金)很好的控制,所以也许有不覆盖App.xaml中指定的样式更好的办法。

TIA

回答

0

他们的方式使用保证金是好的,但是当你使用一个不同的风格,那么那个在App.xaml,它duffently不会使用App.xaml之一。

这是它在WPF中的工作方式,控件使用“最接近”它的样式,并且由于您将此样式直接写入控件,因此它会使用该样式。

你可以在app.xaml一个新的风格基础上,ExpressionDark.xaml的“BaseOn”属性,但你会添加:

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

但是,这是'BasedOn'的属性?我不会认为ExpressionDark.xaml指定任何ItemContainerStyle? – Ian 2011-01-07 13:22:38

+0

嗯,也许我误解了你,我认为ExpressionDark.xaml是一种风格...... 如果它是,或者如果它包含一个样式,你可以给该样式一个键,并且“BasedOn”将得到该键。 然后您将添加项目容器属性设置器。 – Notter 2011-01-07 13:27:07

2

如果指定了“到位”的风格,它被认为是一种全新的风格。 由于ExpressionDark.xaml的默认样式被忘记了该元素。

你必须怎么做才能避免这种情况是:请参阅基本样式与支持算法FMP =

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

查找您控制相应的默认样式。并用ExpressionDark.xaml替换Existing与资源键。您可以识别它,因为这将有适当的TargetType属性设置:

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

凡ListBoxItem的是在使用你的控制(待重新设计)

,因为它有ListBoxItem你可以考虑使用ListBox代替ItemsControl容器。