2015-05-06 44 views
2

我正在通过WPF应用程序移植到Windows Universal。我想添加相同的MouseLeftButtonDown处理程序到我的控件。它们似乎已被Tapped Event所取代。但是,当我添加一个处理程序时:为什么XAML不等于AddHandler?

<Border Tapped="brd_Tapped" /> 

处理程序未被调用。研究的共同建议,之后是设置在隐藏代码的AddHandler的是这样的:

  Brd1.AddHandler(TappedEvent, new TappedEventHandler(Brd_Tapped), true); 

这工作,但我已动态生成的项目,如一个ListViewItem的这变得更加复杂。

为什么XAML处理程序与代码隐藏中的AddHandler不一样,就像在WPF中一样?

+0

嗯,不,这工作得很好。也许你更喜欢PointerPressed。听起来你正在使用VS2015的测试版本,因此对于随机问题总是非零的可能性。使用connect.microsoft.com报告错误。 –

+0

@Hans:你能告诉我你用什么软件工作?我目前只能在VS2015 RC中打开这个项目。所以你建议这是一个错误? – WJM

回答

1

边界内的其他一些控件在到达边界之前可能已处理了Tapped事件。 AddHandler(routedEvent,eventHandler,true)专为您想要获取事件的场景设计,即使它已被其他人处理。

AddHandler的行为不是默认行为,因为处理已处理的事件通常不是一个好主意。对于那些需要的情况,AddHandler是一个选项。

哪个事件取代MouseLeftButtonDown取决于具体的用法。 PointerPressed比较高级别的Tapped事件稍微更接近模拟。使用哪一个(如果有的话)取决于你想要做什么。无论哪种方式,您都需要确保有一些方法可以在没有触摸/鼠标的情况下实现行为。在许多情况下,使用样式化的Button可以更好地获得完整的Click语义,而不是直接处理指针或Tapped事件。

相关问题