Wpf 工具栏按钮样式是否被忽略?

Wpf 工具栏按钮样式是否被忽略?,wpf,styles,toolbar,Wpf,Styles,Toolbar,我在WPF中的工具栏上有按钮 当我执行XAML时: <ToolBar.Resources> <Style TargetType="{x:Type Button}"> <Setter Property="Width" Value="21"></Setter> <Setter Property="Height" Value="21"></Setter> </Style> </

我在WPF中的工具栏上有按钮

当我执行XAML时:

<ToolBar.Resources>
   <Style TargetType="{x:Type Button}">
      <Setter Property="Width" Value="21"></Setter>
      <Setter Property="Height" Value="21"></Setter>
   </Style>
</ToolBar.Resources>

工具栏上的任何按钮都不会相应地设置其大小

我必须转到每个按钮,手动将其宽度和高度设置为所需的值


知道工具栏上的样式为什么不起作用吗?

之所以会出现这种情况,是因为
工具栏
工具栏.ButtonStyleKey
标识的样式应用于按钮,而不是将其保留为默认样式。(这就是为什么即使默认样式是凸起的,工具栏中的按钮也是扁平的。)

您需要“劫持”此样式,而不是默认样式:

<ToolBar.Resources>
  <Style x:Key="{x:Static ToolBar.ButtonStyleKey}" TargetType="Button">
    <Setter Property="Width" Value="100" />
  </Style>
</ToolBar.Resources>


请注意样式声明中的x:键。

如果要向工具栏添加硬编码按钮,可以将toolbar.ItemContainerStyle设置为自定义样式以获得所需效果

<ToolBar.ItemContainerStyle>
    <Style
        TargetType="Button">
        <Setter
            Property="Width"
            Value="21" />
        <Setter
            Property="Height"
            Value="21" />
    </Style>
</ToolBar.ItemContainerStyle>

如果您使用的是ToolBar.ItemsSource,则可以改为使用ToolBar.ItemTemplate为工具栏数据定义模板

<ToolBar.ItemTemplate>
    <DataTemplate>
        <Button
            Width="21"
            Height="21"
            Content="{Binding}" />
    </DataTemplate>
</ToolBar.ItemTemplate>

请注意,在某些情况下,这两种方法可以同时使用,以增加灵活性

这不仅适用于工具栏,而且适用于ItemsControl的所有派生项

祝您好运,

如工具栏中所述,它将自动将自己的样式应用于添加到其中的许多/最典型的控件

作为劫持其样式键或手动将自己的样式应用于控件的替代方法,您可以替代它的方法,该方法首先设置其内部样式。简单的例子:

public class LessIsMoreToolbar : ToolBar
{
    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        // Nada
    }
}
然后在XAML中使用
,而不是

请注意,这里的
PrepareContainerForItemOverride()
并没有专门调用base.PrepareContainerForItemOverride()。这就是消除样式设置的原因。您可以验证这并不能消除您需要的任何东西

需要注意的一点是,
PrepareContainerForItemOverride
,它就像
工具栏的曾祖父母一样。该方法的版本启动了一些其他的
准备…
案例,您也应该注意这些案例不会破坏任何东西。不能()直接调用该版本的方法

但最终,如果它对你有效,那么这是一个很好的简单方法