我有这个命名风格
<Style x:Key="validationSupport" TargetType="{x:Type Control}">
<Setter Property="Margin" Value="5,2,14,2" />
...OMISSIS...
<Style.Triggers>
...OMISSIS...
<DataTrigger Binding="{Binding DataContext.ActiveWorkspace.Editable, RelativeSource={RelativeSource AncestorType=Window}}" Value="False">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
我将它广泛用于 TextBoxes、ComboBoxes、DatePickers 等,因此我将所有这些元素的超类 Control 用作 TargetType。
现在我想使用“Control”没有的特定属性来区分 dataTrigger 内的设置器。似乎我必须创建具有不同名称的不同样式,每个样式用于我想要区分的每个 targetType,但这样我必须更改使用它的所有元素中的样式名称。有没有更聪明的方法来实现这个目标?我不想去修改我拥有的每个 xaml 文件。
第一次回答后更新
我试图将以下设置器放入数据触发器中:
<Setter Property="Background" Value="#FFECECF8" />
<Setter Property="CheckBox.IsEnabled" Value="False" />
<Setter Property="DatePicker.IsEnabled" Value="False" />
<Setter Property="ComboBox.IsEnabled" Value="False" />
<Setter Property="TextBox.IsReadOnly" Value="True" />
不幸的是,测试给出了奇怪的结果。尽管前缀应将其应用程序限制为 CheckBoxes、DatePickers 和 ComboBoxes,但也为 TextBoxes 设置了IsEnabled属性。
我的最终需要是使某些控件内容不可更改,避免与禁用控件相关的难以阅读的颜色。从以前的研究中,我了解到更改“禁用”控件的颜色并不是一件容易的事,并且涉及到控件模板的重新定义。所以我想应用 IsReadOnly 和 Background 的组合,但它不适用于上述问题。事实上,CheckBoxes、DatePickers 和 ComboBoxes 只能使用IsEnabled属性使其不可更改。我错过了什么吗?