Локальный, элементный стиль, не применимый к детям
Я новичок в 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
но это только так, если я явно указать x:Key
на стиль и <Separator Style="..." />
,
Из того, что я узнал до сих пор, мой <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
Класс содержит некоторую "специальную" логику для применения стилей по умолчанию к некоторым типам элементов управления, включая Separator
: https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/ToolBar.cs,5d1684510f45eeb3