WPF中Button按钮按下松开监控&MouseDown和MouseUp不触发题目解决方法 ...

打印 上一主题 下一主题

主题 792|帖子 792|积分 2376

一、例子步伐 


  1. <Grid>
  2.     <Button Content="Click Me" HorizontalAlignment="Center" VerticalAlignment="Center"  
  3.             MouseEnter="Button_MouseEnter"  
  4.             PreviewMouseDown="Button_MouseDown"  
  5.             PreviewMouseUp="Button_MouseUp"/>
  6. </Grid>
复制代码
  1. public Window2()
  2. {
  3.      InitializeComponent();
  4. }
  5. // 当鼠标移入按钮时触发  
  6. private void Button_MouseEnter(object sender, MouseEventArgs e)
  7. {
  8.      System.Diagnostics.Debug.WriteLine("鼠标移入");
  9.      // 或者如果你希望在UI中显示,可以更新TextBlock的Text属性等  
  10. }
  11. // 当鼠标按下按钮时触发(可以看作是开始点击)  
  12. private void Button_MouseDown(object sender, MouseButtonEventArgs e)
  13. {
  14.      System.Diagnostics.Debug.WriteLine("按钮点击(鼠标按下)");
  15.      // 注意:这里不是严格意义上的“按钮点击”,而是鼠标按下的动作  
  16. }
  17. // 当鼠标松开按钮时触发  
  18. private void Button_MouseUp(object sender, MouseButtonEventArgs e)
  19. {
  20.      System.Diagnostics.Debug.WriteLine("按钮松开");
  21.      // 注意:如果你的按钮在MouseDown时触发了某些操作,并希望在MouseUp时撤销或完成这些操作,请在这里处理  
  22. }
复制代码


二、MouseDown和MouseUp不触发题目解决方法

假如Button控件的MouseDown或MouseUp事件没有按预期触发,这通常是由于这些事件在控件内部被标志为Handled了。在WPF的事件路由机制中,一旦某个事件处置惩罚器将事件标志为已处置惩罚(e.Handled = true),那么该事件就不会继续沿着事件路由传播,后续的处置惩罚器也就不会接收到该事件。
对于Button控件来说,其内部逻辑可能会在某些情况下(如为了执行点击命令)自动将MouseDown或MouseUp事件标志为已处置惩罚。这意味着,假如你尝试在XAML中直接为Button的MouseDown或MouseUp事件添加处置惩罚器,这些处置惩罚器可能不会被调用。
解决方法

使用PreviewMouseDown和PreviewMouseUp事件
这些事件在事件路由的“隧道”阶段触发,即在“冒泡”阶段之前。由于它们是在事件向上传播到Button之前触发的,因此它们不太可能被Button的内部逻辑标志为已处置惩罚。你可以在XAML中如许设置:并在后台代码中定义相应的事件处置惩罚器。
  1. <Button Content="Click Me" PreviewMouseDown="Button_PreviewMouseDown" PreviewMouseUp="Button_PreviewMouseUp" />
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表