gpt4 book ai didi

c# - 为什么 XAML 不等同于 AddHandler?

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:21 25 4
gpt4 key购买 nike

我正在将 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 事件稍微更接近的模拟。使用哪个(如果有的话)取决于你想做什么。无论哪种方式,您都需要确保有某种方法可以在不使用触摸/鼠标的情况下实现该行为。在许多情况下,最好使用样式化的 Button 来获得完整的 Click 语义,而不是直接处理指针或 Tapped 事件。

关于c# - 为什么 XAML 不等同于 AddHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30077043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com