我正在尝试使用我的视图模型中定义的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工作。
答案 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。预览允许容器首先捕获事件。