2017-03-22 65 views
1

我是一个WPF初学者,我种停留在搞清楚为什么下面XAML没有做什么,我相信它应该:地方,元素范围的风格并不适用于儿童

<ToolBar HorizontalAlignment="Left" Margin="255,250,0,0" VerticalAlignment="Top"> 
    <ToolBar.Resources> 
     <Style TargetType="{x:Type Separator}"> 
      <Setter Property="Margin" Value="4,6" /> 
     </Style> 
    </ToolBar.Resources> 
    <Button Content="Save"/> 
    <Button Content="Cancel"/> 
    <Separator /> 
    <Button Content="Options"/> 
</ToolBar> 

这应该会导致<Separator />的边距为4,6,但只有在样式和<Separator Style="..." />上明确指定x:Key时才会这样做。

从我迄今了解到的情况来看,我的<Style TargetType="{x:Type Separator}">应该适用于<ToolBar>以内的所有分隔符,其子元素,子元素的子元素等等。

我在做什么错了?

回答

1

您应该设置x:Key{x:Static ToolBar.SeparatorStyleKey}的样式中应用一个ToolBar

<ToolBar HorizontalAlignment="Left" Margin="255,250,0,0" VerticalAlignment="Top"> 
    <ToolBar.Resources> 
     <Style x:Key="{x:Static ToolBar.SeparatorStyleKey}" TargetType="{x:Type Separator}"> 
      <Setter Property="Margin" Value="4,6" /> 
      <Setter Property="Background" Value="Red" /> 
     </Style> 
    </ToolBar.Resources> 
    <Button Content="Save"/> 
    <Button Content="Cancel"/> 
    <Separator /> 
    <Button Content="Options"/> 
</ToolBar> 

这是因为ToolBar类包含一些“特殊”的逻辑应用的默认样式某种类型的控制,包括Separatorhttps://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/ToolBar.cs,5d1684510f45eeb3

+0

哇,谢谢mm8!这解决了这个问题,我将为后来的其他ToolBar元素应用相同的逻辑。 – bokibeg