【发布时间】:2017-02-16 10:08:36
【问题描述】:
我想将触发器定义为资源,以便稍后在我的控件中使用它们。
像这样:
<Window.Resources>
<DataTrigger x:Key="Trigger1" Binding="{Binding ViewModelProperty1}" Value="Val1">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
<DataTrigger x:Key="Trigger2" Binding="{Binding ViewModelProperty2}" Value="Val2">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
...
</Window.Resources>
但是,当我尝试运行代码时,编译器会抱怨 IsEnabled 不是有效成员。我认为这是因为它无法知道所讨论的控件是否甚至具有属性“IsEnabled”。与样式一样,我认为我需要以某种方式指定 TargetType(在我的情况下是 FrameworkElement)。但是怎么做呢?
注意:
请不要建议使用样式而不是触发器作为资源。由于一个控件只能有一种样式,但我需要为一个控件提供几个触发器,所以这里没有样式选项:
在我的实际代码中,我有一个应该有触发器 1、2 和 4 的 Button 和一个应该有触发器 1 和 3 的 TextBox 和一个应该有触发器 2、3 和 4 的标签...我想你明白了.
【问题讨论】:
-
您将如何将这些触发器添加到您的控件中?
-
我的意思是您无论如何都无法将它们添加到控件触发器集合中,只能添加到 DataTemplate、ControlTemplate 或样式触发器中。
-
@Evk 我是这么想的:
<Button> <Button.Style> <Style> <Style.Triggers> <Trigger Binding="{Binding StaticResource="Trigger1"}"/> <Trigger Binding="{Binding StaticResource="Trigger2"}"/> ... </Style.Triggers> </Style> </Button.Style> </Button>