使用触发器作为资源

Kja*_*ara 4 c# wpf resources triggers

我想将触发器定义为资源,以便稍后在我的控件中使用它们。

像这样:

<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>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行代码时,编译器抱怨 IsEnabled 不是有效成员。我认为这是因为它无法知道所讨论的控件是否具有“IsEnabled”属性。与样式一样,我认为我需要以某种方式指定 TargetType(在我的情况下是FrameworkElement)。但是如何?

笔记:

请不要建议使用样式而不是触发器作为资源。由于控件只能有一种样式,但我需要为一个控件提供多个触发器,因此此处没有样式选项:

在我的实际代码中,我有一个应该有触发器 1、2 和 4 的按钮和一个应该有触发器 1 和 3 的文本框和一个应该有触发器 2、3 和 4 的标签......我想你明白了。

Evk*_*Evk 5

你可以像下面这样做(注意我如何预先考虑IsEnabledFrameworkElement以及如何我引用从风格触发这些资源):

<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>
Run Code Online (Sandbox Code Playgroud)