【问题标题】:Using Setters with EventTriggers将 Setter 与 EventTrigger 一起使用
【发布时间】:2016-07-19 18:48:02
【问题描述】:

我有一个按钮和事件触发器。触发器。我想在单击按钮后禁用它。 我收到此错误:

不能将 Type Setter 的值添加到集合或字典中 TriggerActionCollection 类型。

为什么我不能在 EventTrigger 中设置属性?

谢谢

    <Button   Width="100" Height="50" >
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <EventTrigger RoutedEvent="MouseLeftButtonDown">
                    <EventTrigger.Actions>
                     <Setter Property="IsEnabled" Value="False"/>
                    </EventTrigger.Actions>
               </EventTrigger>
          </Style.Triggers>
       </Style>
    </Button.Style>
</Button>

【问题讨论】:

  • 为什么?只需使用事件Button_Clicked。您可能不想一直自动禁用该按钮。如果输入配置不正确怎么办?至少在按钮单击事件处理程序中,您可以做出决定。此外,有时您可能希望重新启用该按钮。
  • @IAbstract 不想隐藏任何代码 (MVVM)。
  • 祝你好运。似乎是一个非常有限的要求。我假设你不会有 ViewModel 是否正确?你的虚拟机不是在实例化视图吗?您的 VM 可以订阅按钮单击事件并使用模型中可用的任何数据来确定是否禁用按钮。 VM 可以在满足条件时重新启用该按钮。视图本身没有代码。
  • 或者,您可以拥有一个绑定在触发器上执行的 Command 对象。
  • @IAbstract 谢谢。我将研究绑定在触发器上执行的 Command 对象。

标签: wpf button triggers


【解决方案1】:

您只能在此类动作集合中使用动画(因此您可以使用单帧动画)。此外,如果您在 MouseDown 上禁用,您的按钮可能永远不会执行。

至于为什么你不能这样做,我不完全确定,但Setters 通常表示依赖于状态的配置,而不是命令式操作,所以也许这就是为什么只允许动画。

【讨论】:

  • 谢谢。这回答了我的问题。
猜你喜欢
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
相关资源
最近更新 更多