WPF中StackPanel的MouseLeftButtonUp与MouseLeftButtonDown问题

我想成仙啊啊啊 2019-05-29 11:32:57
求大佬帮我看下:

我在一个StackPanel控件中注册了一个MouseLeftButtonUp和MouseLeftButtonDown事件
MouseLeftButtonUp事件是用来实现关闭窗口的
MouseLeftButtonDown是继承了window的MouseDown事件,用来实现拖动的

但是实际运行程序的时候MouseLeftButtonUp事件不会响应,而MouseLeftButtonDown事件会响应。
当把MouseLeftButtonDown事件删除后,MouseLeftButtonUp事件又能响应了

StackPanel的MouseLeftButtonUp使用了AddHandler也还是不起作用。
请问有什么比较好的解决方案。

...全文
530 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
RunnerDNA 2019-06-04
  • 打赏
  • 举报
回复
重写OnMouseLeftButtonDown事件来支持拖动,这样StackPanel_MouseLeftButtonUp等鼠标事件都可以响应

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);

// 获取鼠标相对Panel位置
Point position = e.GetPosition(this.myStackPanel);

// 如果鼠标位置在Panel内,允许拖动
if (e.LeftButton == MouseButtonState.Pressed)
{
if (position.X >= 0 && position.X < this.myStackPanel.ActualWidth && position.Y >= 0 && position.Y < this.myStackPanel.ActualHeight)
{
this.DragMove();
}
}
}
  • 打赏
  • 举报
回复
引用 8 楼 智者知已应修善业 的回复:
建议你把按键分开,比如把关闭功能调到鼠标右键上. 因为鼠标拖动必定会按下左键这要考虑到,通常我会避开按键操作有相同的部分,换个思路解决问题,能解决问题的办法很多,不钻牛角.
可是用户基本上都是按鼠标左键,很少会按右键的吧
  • 打赏
  • 举报
回复
建议你把按键分开,比如把关闭功能调到鼠标右键上. 因为鼠标拖动必定会按下左键这要考虑到,通常我会避开按键操作有相同的部分,换个思路解决问题,能解决问题的办法很多,不钻牛角.
  • 打赏
  • 举报
回复
引用 2 楼 exception92 的回复:
设置stackpanel的background为transparent呢
这个之前也试过,还是一样没有效果
  • 打赏
  • 举报
回复
引用 3 楼 OrdinaryCoder 的回复:
试试PreviewMouseLeftButtonDown/UP事件
这个我试了,也不行。
  • 打赏
  • 举报
回复
最好还是不要使用同一按键处理不同事件, 或者设置一个状态标记看是否能解决同一按键冲突问题.
exception92 2019-05-29
  • 打赏
  • 举报
回复
对于逻辑树来讲,隧道事件之后会执行冒泡事件。
exception92 2019-05-29
  • 打赏
  • 举报
回复
设置stackpanel的background为transparent呢
OrdinaryCoder 2019-05-29
  • 打赏
  • 举报
回复
试试PreviewMouseLeftButtonDown/UP事件
  • 打赏
  • 举报
回复
//窗体移动事件 private void Window_MouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left) this.DragMove(); } //stackpanel中的MouseLeftButtonUpEvent事件 private void CloseButton_MouseUp(object sender, MouseButtonEventArgs e) { Application.Current.MainWindow.Close(); Environment.Exit(0); } CloseButton.AddHandler(MouseLeftButtonUpEvent,new MouseButtonEventHandler(CloseButton_MouseUp),true);
exception92 2019-05-29
  • 打赏
  • 举报
回复
引用 7 楼 我想成仙啊啊啊 的回复:
[quote=引用 2 楼 exception92 的回复:] 设置stackpanel的background为transparent呢
这个之前也试过,还是一样没有效果[/quote] https://stackoverflow.com/questions/12496258/mouseleftbuttonup-does-not-fire 最好还是用 MouseUp事件来响应鼠标右键进行关闭吧。
  • 打赏
  • 举报
回复
独立弄个按钮关闭不行?办法多了去了.

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧