我正在显示 aPopup
以响应按钮单击 ( popup.IsOpen = true;
)。弹出窗口包含一个组合框,当我单击组合框中的一个项目时,SelectionChanged 事件所做的一件事就是隐藏弹出窗口。
弹出窗口出现DataGrid
在我的页面上,我发现鼠标单击组合框也被我在 DataGrid 上的 MouseUp 事件拾取。知道发生了什么吗?
我正在显示 aPopup
以响应按钮单击 ( popup.IsOpen = true;
)。弹出窗口包含一个组合框,当我单击组合框中的一个项目时,SelectionChanged 事件所做的一件事就是隐藏弹出窗口。
弹出窗口出现DataGrid
在我的页面上,我发现鼠标单击组合框也被我在 DataGrid 上的 MouseUp 事件拾取。知道发生了什么吗?
MouseUp
Event 有一个类型为 的路由策略Bubbling
。使用这种策略的事件会向上传递到父控件。由于Popup
是 的孩子DataGrid
,因此事件将“冒泡”到DataGrid
。如果您不希望事件冒泡,您可以尝试使用PreviewMouseUp
,它具有Tunneling
路由策略,并将“隧道”沿着链向下传递到子控件。这是一个体面overview
的Routing Strategies
。
我遇到了同样的问题。奇怪的是,在调试器中运行代码时不会发生这种情况——它只会在发布版本中发生。它确实似乎是 WPF 中的一个错误。试图捕捉点击并将事件设置为已处理是行不通的。
我的解决方法是,当弹出窗口打开时,告诉下面的控件忽略单击。