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

3
在WPF中,使用Prism v4,我有一个作为区域的ToolBar。在这个区域中,我注入包含工具栏按钮和分隔符的UserControl。 问题在于,由于按钮现在位于UserControl中,因此工具栏样式不再适用。
我可以通过定义样式来解决这个问题:
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"/>
<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"/>

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

谢谢!

3个回答

6
同样的技术可以在默认的工具栏样式中使用,因此您不必在本地重置它们。
    <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的默认行为,但我发现它需要明确的定义。
希望能对你有所帮助。 :)

3

您可以使用类似以下的方法:

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

如果您将此内容放入您的工具栏资源中,则它将应用于其中任何按钮。

这也适用于动态注入的任何视图吗? - mehul9595

2

将基础样式放入工具栏资源中:

<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接