不适用于子元素的本地元素范围样式
Local, element-scoped style not applying to children
我是一个 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>
内的所有分隔符、它的子元素、它的子元素等等。
我做错了什么?
您应该将 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
class 包含一些 "special" 逻辑,用于将默认样式应用于某些类型的控件,包括 Separator
:https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/ToolBar.cs,5d1684510f45eeb3
我是一个 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>
内的所有分隔符、它的子元素、它的子元素等等。
我做错了什么?
您应该将 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
class 包含一些 "special" 逻辑,用于将默认样式应用于某些类型的控件,包括 Separator
:https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/ToolBar.cs,5d1684510f45eeb3