创建于WPF + C#为Windows 8地铁(微软UI)的应用程序,我遇到了一个按钮PointerPressed事件的难度。 当我执行左键单击(鼠标)事件不会发生,但如果用右键单击或自来水发生。 那么,什么是错的事件? 例如
<Button x:Name="Somebutton" Width="100" Height="100"
PointerPressed="Somebutton_PointerPressed"/>
创建于WPF + C#为Windows 8地铁(微软UI)的应用程序,我遇到了一个按钮PointerPressed事件的难度。 当我执行左键单击(鼠标)事件不会发生,但如果用右键单击或自来水发生。 那么,什么是错的事件? 例如
<Button x:Name="Somebutton" Width="100" Height="100"
PointerPressed="Somebutton_PointerPressed"/>
该解决方案是非常简单的:这些事件必须通过XAML但thorugh AddHandler的方法没有处理。
SomeButton.AddHandler(PointerPressedEvent,
new PointerEventHandler(SomeButton_PointerPressed), true);
我也遇到过这个问题,但由于我的按钮被一个ItemsControl动态创建的,也没有好地方,从打电话的AddHandler无法使用公认的答案。
相反,我子类Windows.UI.Xaml.Controls.Button:
public sealed class PressAndHoldButton : Button
{
public event EventHandler PointerPressPreview = delegate { };
protected override void OnPointerPressed(PointerRoutedEventArgs e)
{
PointerPressPreview(this, EventArgs.Empty);
base.OnPointerPressed(e);
}
}
现在,消费控制可以绑定到PointerPressPreview而不是PointerPressed
<local:PressAndHoldButton
x:Name="Somebutton"
Width="100"
Height="100"
PointerPressPreview="Somebutton_PointerPressed"/>
如果你愿意,你可以在东西的覆盖OnPointerPressed方法一些额外的逻辑,这样只触发左键单击该事件,或单击鼠标右键。 任何你想要的。
FWIW,我一直面临着同样的问题,并通过添加事件处理一些其他控制(但按钮)解决了这个问题。
在我来说,我有一个Button
周围包裹SymbolIcon
像这样:
<Button PointerPressed="OnTempoPressed" PointerReleased="OnTempoReleased">
<SymbolIcon Symbol="Add" />
</Button>
我所做我只是删除的Button
包装和添加的处理程序到SymbolIcon
本身一切正常,现在:
<SymbolIcon Symbol="Add"
PointerPressed="OnTempoPressed" PointerReleased="OnTempoReleased"/>
如果你是,你是用按钮控制工作,然后尝试使用“点击”事件附加事件。
请注意,Button控件内部考虑和处理PointerPressed,的MouseLeftButtonDown,和的MouseLeftButtonUp提高Click事件。 一般来说Button控件不会允许PointerPressed,的MouseLeftButtonDown,事件的MouseLeftButtonUp到冒泡和火灾。