使用触发器作为资源
using triggers as resources
我想将触发器定义为资源,以便稍后在我的控件中使用它们。
像这样:
<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 的按钮和一个应该有触发器 1 和 3 的文本框以及一个应该有触发器 2、3 和 4 的标签...我想你明白了。
你可以这样做(注意我如何在 IsEnabled
前面加上 FrameworkElement
以及我如何从样式触发器引用这些资源):
<Window.Resources>
<DataTrigger x:Key="Trigger1"
Binding="{Binding ViewModelProperty1}"
Value="Val1">
<Setter Property="FrameworkElement.IsEnabled"
Value="False" />
</DataTrigger>
<DataTrigger x:Key="Trigger2"
Binding="{Binding ViewModelProperty2}"
Value="Val2">
<Setter Property="FrameworkElement.IsEnabled"
Value="False" />
</DataTrigger>
</Window.Resources>
<Button>
<Button.Style>
<Style>
<Style.Triggers>
<StaticResource ResourceKey="Trigger1" />
<StaticResource ResourceKey="Trigger2" />
</Style.Triggers>
</Style>
</Button.Style>
</Button>
我想将触发器定义为资源,以便稍后在我的控件中使用它们。
像这样:
<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 的按钮和一个应该有触发器 1 和 3 的文本框以及一个应该有触发器 2、3 和 4 的标签...我想你明白了。
你可以这样做(注意我如何在 IsEnabled
前面加上 FrameworkElement
以及我如何从样式触发器引用这些资源):
<Window.Resources>
<DataTrigger x:Key="Trigger1"
Binding="{Binding ViewModelProperty1}"
Value="Val1">
<Setter Property="FrameworkElement.IsEnabled"
Value="False" />
</DataTrigger>
<DataTrigger x:Key="Trigger2"
Binding="{Binding ViewModelProperty2}"
Value="Val2">
<Setter Property="FrameworkElement.IsEnabled"
Value="False" />
</DataTrigger>
</Window.Resources>
<Button>
<Button.Style>
<Style>
<Style.Triggers>
<StaticResource ResourceKey="Trigger1" />
<StaticResource ResourceKey="Trigger2" />
</Style.Triggers>
</Style>
</Button.Style>
</Button>