首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF MouseLeftButtonUp未触发

WPF MouseLeftButtonUp未触发
EN

Stack Overflow用户
提问于 2008-11-25 17:55:49
回答 3查看 21.2K关注 0票数 15

当我使用MouseUp事件时,我可以通过鼠标右键单击来触发它。但是MouseLeftButtonUp不会通过任何一次点击来触发!

代码语言:javascript
复制
<Button MouseLeftButtonUp="btnNewConfig_MouseUp"  Name="btnNewConfig">
    <StackPanel Orientation="Horizontal">
        <Image Source="Icons\new.ico" Height="24" Width="24" Margin="5"/>
        <TextBlock VerticalAlignment="Center">New</TextBlock>
    </StackPanel>
</Button>

我知道这很可能是很简单的事情。谢谢你的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-11-25 18:01:22

因为Button.Click实际上是LeftButtonDown事件和LeftButtonUp事件的组合,所以看起来Button控件正在吞噬该事件。

但是您可以在Button而不是LeftButtonUp上订阅隧道事件PreviewMouseLeftButtonUp

票数 30
EN

Stack Overflow用户

发布于 2018-05-10 06:56:40

订阅隧道事件而不是气泡事件有一些相当混乱的副作用,我将在后面解释。

这里有一个更好的解决方案,因为它保持了你的泡沫完好无损。:)

代码语言:javascript
复制
btnNewConfig.AddHandler(MouseLeftButtonUpEvent, 
                        new RoutedEventHandler(btnNewConfig_MouseUp), 
                        true);

您必须使用RoutedEventArgs而不是MouseButtonEventArgs来声明事件处理程序,但您可以直接将其转换回MouseButtonEventArgs inside。

代码语言:javascript
复制
void btnNewConfig_MouseUp(object sender, RoutedEventArgs e)
{
    MouseButtonEventArgs args = e as MouseButtonEventArgs;
    // ...
}

请注意AddHandler中的最后一个参数-如果将其设为真,即使之前的处理程序设置为e.Handled = true;,也会触发事件

Now关于 PreviewMouseLeftButtonUp**:**

隧道事件在孩子之前为父母激发。冒泡--正好相反。如果涉及到许多事件处理程序,那么您应该坚持使用所有冒泡或所有隧道处理程序,否则添加的事件处理程序越多,它就会变得越混乱-添加一个新的事件处理程序可能会导致您重新访问应用程序中的所有其他事件处理程序。

大多数人发现冒泡模型要自然得多。这就是为什么公认的答案是有问题的。

票数 4
EN

Stack Overflow用户

发布于 2011-08-04 05:11:31

Button正在为其Button.Click事件使用鼠标左/右按钮向上/向下事件(并将它们标记为Handled)。

作为Jobi said,您可以使用PreviewMouseLeftButtonUp事件,但我建议您创建自己的按钮模板并修改其行为。(例如,不要将MouseLeftButtonUp标记为Handled = true),或者简单地使用Button以外的其他东西作为父容器(取决于您真正需要它的用途)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/318288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档