PointerPressed不工作的左击(PointerPressed not working on

2019-08-16 20:15发布

创建于WPF + C#为Windows 8地铁(微软UI)的应用程序,我遇到了一个按钮PointerPressed事件的难度。 当我执行左键单击(鼠标)事件不会发生,但如果用右键单击或自来水发生。 那么,什么是错的事件? 例如

 <Button x:Name="Somebutton"  Width="100" Height="100"
PointerPressed="Somebutton_PointerPressed"/>

Answer 1:

该解决方案是非常简单的:这些事件必须通过XAML但thorugh AddHandler的方法没有处理。

SomeButton.AddHandler(PointerPressedEvent, 
new PointerEventHandler(SomeButton_PointerPressed), true); 


Answer 2:

我也遇到过这个问题,但由于我的按钮被一个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方法一些额外的逻辑,这样只触发左键单击该事件,或单击鼠标右键。 任何你想要的。



Answer 3:

FWIW,我一直面临着同样的问题,并通过添加事件处理一些其他控制(但按钮)解决了这个问题。

在我来说,我有一个Button周围包裹SymbolIcon像这样:

<Button PointerPressed="OnTempoPressed" PointerReleased="OnTempoReleased">
  <SymbolIcon Symbol="Add" />
</Button>

我所做我只是删除的Button包装和添加的处理程序到SymbolIcon本身一切正常,现在:

<SymbolIcon Symbol="Add"
  PointerPressed="OnTempoPressed" PointerReleased="OnTempoReleased"/>


Answer 4:

如果你是,你是用按钮控制工作,然后尝试使用“点击”事件附加事件。

请注意,Button控件内部考虑和处理PointerPressed,的MouseLeftButtonDown,和的MouseLeftButtonUp提高Click事件。 一般来说Button控件不会允许PointerPressed,的MouseLeftButtonDown,事件的MouseLeftButtonUp到冒泡和火灾。



文章来源: PointerPressed not working on left click