使用样式设置工具栏按钮大小

时间:2010-03-09 01:36:08

标签: 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>
</ToolBar.Resources>

工具栏上的所有按钮都没有相应地设置尺寸。

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

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

3 个答案:

答案 0 :(得分:9)

这是因为ToolBar将ToolBar.ButtonStyleKey标识的样式应用于按钮,而不是将它们保留为默认样式。 (这就是为什么即使提出默认样式,工具栏中的按钮也是平的。)你需要“劫持”这种风格,而不是默认风格:

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

注意样式声明中的x:Key。

答案 1 :(得分:2)

如果要将硬编码按钮添加到工具栏,可以将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的所有派生。

祝你好运,

答案 2 :(得分:0)

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

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

public class LessIsMoreToolbar : ToolBar
{
    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        // Nada
    }
}

,然后在您的XAML中使用<local:LessIsMoreToolbar>而不是<Toolbar>

请注意,这里PrepareContainerForItemOverride()不会专门调用base.PrepareContainerForItemOverride()`。这就是消除样式设置的原因。您可以view the base's version of this method yourself来验证这并不能消除您需要的任何东西。

一个警告是PrepareContainerForItemOverride is defined by ItemsControl,就像Toolbar的曾祖父母一样。此方法的版本开始了其他一些Prepare...情况,您也应注意不要破坏任何情况。您不能(or perhaps shouldn't)直接调用该版本的方法。

但是最后,如果它对您有用,那么这是一个很好的简单方法。