【问题标题】:using triggers as resources使用触发器作为资源
【发布时间】: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 我是这么想的:&lt;Button&gt; &lt;Button.Style&gt; &lt;Style&gt; &lt;Style.Triggers&gt; &lt;Trigger Binding="{Binding StaticResource="Trigger1"}"/&gt; &lt;Trigger Binding="{Binding StaticResource="Trigger2"}"/&gt; ... &lt;/Style.Triggers&gt; &lt;/Style&gt; &lt;/Button.Style&gt; &lt;/Button&gt;

标签: c# wpf triggers resources


【解决方案1】:

您可以这样做(注意我如何在 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>

【讨论】:

  • 非常感谢!我不敢相信以前没有人问过这个问题......而且谷歌也没有帮助......
  • 确实,我之前实际上也不知道(也没有想过)这一点,但经过一些研究后,我设法找到了它的实现方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2021-10-19
  • 2019-05-11
  • 2010-12-11
  • 2020-10-24
  • 2019-04-23
  • 1970-01-01
相关资源
最近更新 更多