当我使用Expression Blend Interactivity程序集中的EventTrigger时,如何使用我的WPF按钮获得“Click”事件?

时间:2012-10-31 09:48:13

标签: wpf xaml command

我正在尝试使用我的视图模型中定义的Command,其中包含xmlns中定义的EventTriggers:i =“http://schemas.microsoft.com/expression/2010/interactivity”

我已将控件从Microsoft.Surface.Presentation.Controls.SurfaceSlider派生控件更改为常规WPF按钮。使用Button,如果我使用EventName =“MouseEnter”,则会触发相同的ConfirmOrderCommand,但如果我使用EventName =“Click”则没有任何反应。 Button的XAML就在这里。

<Button Name="ConfirmButton"
          IsEnabled="{Binding IsEnabled}"
          Style="{StaticResource  ConfirmButtonStyle}"
          >
    <i:Interaction.Triggers>
      <i:EventTrigger EventName="Click">
        <i:InvokeCommandAction Command="{Binding ConfirmOrderCommand}"/>
      </i:EventTrigger>
    </i:Interaction.Triggers>
  </Button>

我希望用户能够单击按钮来触发命令。我可以让Click事件适用于Button,还是需要查找其他事件?我也没能让MouseLeftButtonUp工作。

2 个答案:

答案 0 :(得分:1)

尝试EventName =“Button.Click”。无论如何,您只需设置Button本身的Command属性,然后删除Interaction.Triggers部分。

答案 1 :(得分:0)

Button.Click无法正常工作的实际原因是经过多次痛苦后确定的,并且在他早上醒来之后最终向某人询问了该项目。

我们的应用程序使用FrameworkElement Preview委托来窃取几乎所有的Button事件。

public static void RegisterEvents(FrameworkElement parent)
{
    parent.PreviewMouseDown += MouseDown;
    parent.PreviewMouseUp += MouseUp;
    // even more of these
}
然后,在MouseDown等情况下,代理人会使用System.Window.Input.TouchDevice到ReportDown()。这一次我只是觉得我不知道标准WPF按钮通常是如何工作的。我想这个故事的寓意是事件不必从子控件开始,然后传播到他们的容器,直到Handled = true。预览允许容器首先捕获事件。