为什么 XAML 不等同于 AddHandler?
Why is XAML not the equivalent of AddHandler?
我正在将 WPF 应用程序移植到 Windows Universal。我想将相同的 MouseLeftButtonDown 处理程序添加到我的控件中。它们似乎已被 Tapped Event 取代。但是,当我这样添加处理程序时:
<Border Tapped="brd_Tapped" />
处理程序未被调用。在研究之后,常见的建议是像这样在代码隐藏中设置 AddHandler:
Brd1.AddHandler(TappedEvent, new TappedEventHandler(Brd_Tapped), true);
这行得通,但是当我动态生成项目(如 ListViewItem)时,这会变得更加复杂。
为什么 XAML 处理程序不像 WPF 中那样在代码隐藏中执行与 AddHandler 相同的操作?
边框内的某些其他控件可能在到达您的边框之前处理了 Tapped 事件。 AddHandler(routedEvent,eventHandler,true) 专为您想要获取事件的场景而设计,即使它已经被其他人处理过。
AddHandler 的行为不是默认行为,因为处理已处理的事件通常不是一个好主意。 AddHandler 是那些需要它的情况下的一个选项。
用什么事件代替MouseLeftButtonDown要看具体的使用情况。 PointerPressed 是比更高级别的 Tapped 事件稍微更接近的模拟。使用哪个(如果有的话)取决于你想做什么。无论哪种方式,您都需要确保有某种方法可以在没有 touch/mouse 的情况下实现该行为。在许多情况下,最好使用样式化的 Button 来获得完整的 Click 语义,而不是直接处理指针或 Tapped 事件。
我正在将 WPF 应用程序移植到 Windows Universal。我想将相同的 MouseLeftButtonDown 处理程序添加到我的控件中。它们似乎已被 Tapped Event 取代。但是,当我这样添加处理程序时:
<Border Tapped="brd_Tapped" />
处理程序未被调用。在研究之后,常见的建议是像这样在代码隐藏中设置 AddHandler:
Brd1.AddHandler(TappedEvent, new TappedEventHandler(Brd_Tapped), true);
这行得通,但是当我动态生成项目(如 ListViewItem)时,这会变得更加复杂。
为什么 XAML 处理程序不像 WPF 中那样在代码隐藏中执行与 AddHandler 相同的操作?
边框内的某些其他控件可能在到达您的边框之前处理了 Tapped 事件。 AddHandler(routedEvent,eventHandler,true) 专为您想要获取事件的场景而设计,即使它已经被其他人处理过。
AddHandler 的行为不是默认行为,因为处理已处理的事件通常不是一个好主意。 AddHandler 是那些需要它的情况下的一个选项。
用什么事件代替MouseLeftButtonDown要看具体的使用情况。 PointerPressed 是比更高级别的 Tapped 事件稍微更接近的模拟。使用哪个(如果有的话)取决于你想做什么。无论哪种方式,您都需要确保有某种方法可以在没有 touch/mouse 的情况下实现该行为。在许多情况下,最好使用样式化的 Button 来获得完整的 Click 语义,而不是直接处理指针或 Tapped 事件。