为什么XAML不等同于AddHandler?

时间:2015-05-06 12:41:02

标签: c# xaml win-universal-app

我正在将WPF应用程序移植到Windows Universal。我想在我的控件中添加相同的MouseLeftButtonDown处理程序。它们似乎已被Tapped Event取代。但是,当我添加一个处理程序时:

<Border Tapped="brd_Tapped" />

未调用处理程序。在研究了常见的建议后,将AddHandler设置为代码隐藏,如下所示:

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

这有效但当我动态生成像ListViewItem这样的项时,这变得更加复杂。

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

1 个答案:

答案 0 :(得分:2)

边框内的其他控件可能在到达边框之前处理了Tapped事件。 AddHandler(routedEvent,eventHandler, true )专门针对您希望获取事件的场景,即使它已被其他人处理过。

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

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