2017-03-22 104 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