如何强制工具栏内的WPF中的UserControl使用ToolBar的默认按钮样式?
我有一个名为ImageButton的简单用户控件,其XAML类似于:
<UserControl x:Class="myNameSpace.ImageButtonUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="imageButton"
>
<Button Style="{Binding ElementName=imageButton, Path=ButtonStyle}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ElementName=imageButton, Path=ImageSource}"
VerticalAlignment="Center"
/>
<TextBlock Text="{Binding ElementName=imageButton, Path=Text}"
Style="{Binding ElementName=imageButton, Path=TextStyle}"
VerticalAlignment="Center"
/>
</StackPanel>
</Button>
</UserControl>
我在这些绑定路径的代码中有一些依赖属性,一切正常。
直到我把它放在ToolBar中。通常,当您将按钮放在工具栏中时,它们会被ToolBar重新设置为工具栏按钮。我已经了解了如何更改此样式(请参阅ToolBar.ButtonStyleKey。但是,如何将已定义的样式应用于用户控件的Button Style依赖项属性?
答案 0 :(得分:20)
<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">
Hello, world!
</Button>
样式仅针对按钮,因此它只能应用于按钮。 (根据您的评论,这不会成为问题。)
答案 1 :(得分:4)
我找到了一种似乎有效的方法,虽然我对解决这个问题的其他方法感兴趣。
我向UserControl添加了一个加载的事件处理程序并将其放入其中。
if (button.Style == null && this.Parent is ToolBar)
{
button.Style = (Style)FindResource(ToolBar.ButtonStyleKey);
}
其中button是UserControl中按钮的名称。
答案 2 :(得分:0)
你需要一些强大的黑魔法才能让它自动为你的usercontrol创建一个有效的新风格。每种类型的内置控件都有内置样式,您可以将其添加到工具栏中。 (请注意,ToolBar.ButtonStyleKey并不是唯一的。)您需要自己制作并应用与标准工具栏元素匹配的自己的样式。