解决DataGrid内Popup的Got_Focus与Lost_Focus焦点冲突问题
DataGrid弹窗点击后被行选中夺走焦点导致关闭的问题
我有一个DataGrid,最后一列是「更多选项弹窗」。点击某行最后一个单元格的弹窗图标时,Popup会短暂显示,但随即该行被选中,夺走Popup的焦点导致弹窗关闭,必须双击才能再次打开。
设置SelectionMode="None"可以解决这个问题,但我需要保留行可选中的功能。尝试过通过事件控制焦点的方案,但效果不符合预期:
PopupBox selectedPopupBox; public CustomersView() { InitializeComponent(); } private void PopupBox_GotFocus(object sender, RoutedEventArgs e) { var popupBox = sender as PopupBox; selectedPopupBox = popupBox; popupBox.IsPopupOpen = true; } private void CustomersDataGrid_SelectionChanged(object sender, GridSelectionChangedEventArgs e) { if (selectedPopupBox != null) { selectedPopupBox.Focus(); popupBox.IsPopupOpen = true; } }
该方案的问题在于:选中其他行时,之前打开过的Popup会被再次打开。
注:我仅希望点击「更多选项图标」时打开弹窗,点击行内其他单元格时不触发该行为。
行为演示
- 默认行为:

- 设置
SelectionMode="None"的效果:
- 代码后置方案的效果:

内容的提问来源于stack exchange,提问作者Miraziz
相关产品推荐
相关产品推荐

