Wpf 工具栏按钮样式是否被忽略?
我在WPF中的工具栏上有按钮 当我执行XAML时: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> </
<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
,它就像工具栏的曾祖父母一样。该方法的版本启动了一些其他的准备…
案例,您也应该注意这些案例不会破坏任何东西。不能()直接调用该版本的方法
但最终,如果它对你有效,那么这是一个很好的简单方法