7

如何强制工具栏内的 WPF 中的用户控件使用工具栏的默认按钮样式?

我有一个名为 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。但是如何将已定义的样式应用于我的用户控件的按钮样式依赖项属性?

4

3 回答 3

21

哦,对不起!我误解了你的问题。试一试:

<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">
    Hello, world!
</Button>

该样式仅针对按钮,因此只能应用于按钮。(从您的评论来看,这不会是一个问题。)

于 2009-06-04T04:44:11.087 回答
4

我找到了一种似乎可行的方法,尽管我对解决此问题的其他方法感兴趣。

我向我的 UserControl 添加了一个加载的事件处理程序并将其放入其中。

if (button.Style == null && this.Parent is ToolBar)
{
    button.Style = (Style)FindResource(ToolBar.ButtonStyleKey);
}

其中 button 是我的 UserControl 中按钮的名称。

于 2009-06-03T23:01:59.540 回答
0

你需要一些强大的黑魔法才能让它自动为你的用户控件创建一个有效的新样式。您可以添加到工具栏的每种类型的内置控件都有内置样式。(请注意 ToolBar.ButtonStyleKey 并不孤单。)您需要自己制作和应用与标准工具栏元素匹配的自己的样式。

于 2009-06-03T22:20:34.817 回答