【发布时间】:2017-11-23 13:40:16
【问题描述】:
我的整个应用程序的按钮样式如下所示:
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
some style code here
</Style>
它确实会影响每个这样使用的按钮:
<Button />
但是当我想像这样改变一个特定的按钮时:
<Button>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding SomeBoolean}" Value="false">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
它是 windows 标准样式。
【问题讨论】:
-
这是正常的,因为您正在覆盖全局按钮样式。您可以做的是创建一个附加样式,将您愿意应用的两种样式结合起来,或者将您的全局样式放入本地按钮样式中
-
我不能创建一个全局样式,我可以像使用标准 windows 样式那样使用触发器来更改它吗?为每个需要触发的按钮创建新样式似乎是错误的。
-
当然可以。为您的第一个样式指定一个资源名称,然后使用与您的第一个样式相同的语法,方法是将
basedOnnyour trigger 需要的样式基于您的第一个样式的资源名称,在您的控件上使用Style="{StaticResource trigger_style_name}" -
我以前也有过,但后来我必须将这种样式分配给整个应用程序中使用的每个按钮。我想避免这种情况。
-
对不起,我猜你必须这样做。您必须创建一个“appButton”,它将继承 Windows 按钮并应用您的应用程序样式。然后在您的整个应用程序中,用 xaml 文件中的 button_inherited_class_name 替换按钮控件。这就是为什么在启动 WPF 应用程序时,良好的做法是继承自定义控件类中的每个控件。我没有看到其他方式