1

我正在尝试使用在我的视图模型中定义的命令,以及在 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 中定义的 EventTriggers

我已将控件从 Microsoft.Surface.Presentation.Controls.SurfaceSlider 派生控件更改为常规 WPF 按钮。使用 Button,如果我使用 EventName="MouseEnter",则会触发相同的 ConfirmOrderCommand,但如果我使用 EventName="Click",则不会发生任何事情。按钮的 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 工作。

4

2 回答 2

1

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

于 2012-10-31T19:45:00.750 回答
1

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。预览允许容器首先捕获事件。

于 2012-11-14T15:02:28.263 回答