XAML:将样式应用于嵌套控件

时间:2011-04-14 12:15:07

标签: wpf xaml styles

在WPF,Prism v4中,我有一个充当区域的工具栏。在这个区域中,我注入UserControls,其中包含工具栏的按钮和分隔符。 问题是因为按钮现在位于UserControl中,工具栏样式不再适用。

可以通过定义样式来解决这个问题:

<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"/>
<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"/>

但我想避免这种情况,因为我有数百个按钮。所以我的问题是我是否可以从资源字典中为ToolBar下的所有按钮定义样式?

谢谢!

3 个答案:

答案 0 :(得分:6)

CodeNaked和Marat Khasanov提到的相同技术也可以在默认的ToolBar样式中使用,因此您不必在本地重置它们。

    <Style TargetType="{x:Type ToolBar}">
        <Style.Resources>
            <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" />
            <Style TargetType="{x:Type Separator}" BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
        </Style.Resources>
        <!-- etc... -->
    </Style>

我希望这是ToolBar的默认行为,但我发现它需要明确的定义。

希望它有所帮助。 :)

答案 1 :(得分:3)

您可以使用以下内容:

<Style TargetType="Separator" BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
<Style TargetType="Button" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" />

如果您将其放入ToolBar资源中,那么它将应用于其中的任何按钮。

答案 2 :(得分:2)

将基本样式放入ToolBar资源:

<ToolBar>
    <ToolBar.Resources>
        <Style TargetType="{x:Type Button}"
               BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"/>
        <Style TargetType="{x:Type Separator}"
               BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"/>
    </ToolBar.Resources>
    ...
</ToolBar>