在WPF中,Prism v4,我有一个ToolBar充当区域。在该区域中,我注入UserControls,其中包含工具栏的按钮和分隔符。问题在于,由于按钮现在位于UserControl中,因此工具栏样式不再适用。
我可以通过定义样式来解决这个问题:
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"/>
<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"/>
但是我想避免这种情况,因为我有数百个按钮。所以我的问题是,是否可以从资源字典中为工具栏下的所有按钮定义样式?
谢谢!
您可以使用类似:
<Style TargetType="Separator" BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
<Style TargetType="Button" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" />
如果将其放在ToolBar资源中,则它将应用于其中的任何按钮。
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的默认行为,但我发现它需要显式定义。
希望有帮助。 :)
将基本样式放入工具栏资源:
<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>
我喜欢@CodeNaked的解决方案,但是不知为何我在菜单分隔符的使用上苦苦挣扎。这是我的代码:
<Menu>
<Menu.Resources>
<Style TargetType="MenuItem">
<Setter Property="Padding" Value="0,0,0,0"/>
</Style>
<Style TargetType="Separator" BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
</Menu.Resources>
<MenuItem Header="Foo"></MenuItem>
<Separator/>
<MenuItem Header="Bar"></MenuItem>
</Menu>
如果我将样式直接放在分隔符上,它将起作用。
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"/>
您知道为什么它不起作用吗?