2010-11-24 17 views
1

我想在用户在Silverlight中的DataGrid中选择一行时显示一个自定义确认消息框(ChildWindow)。消息框只有2个按钮,一个是和一个不是。当用户单击否时,我想要恢复DataGrid中以前选择的项目。我已经能够完成所有这些。如何从silverlight数据网格的selectionchanged事件显示自定义消息框?

问题是,当消息框出现并且我单击“否”并且我恢复先前选择的项目时,用户试图选择的项目仍保留在MouseOver可视状态,直到将鼠标移动到其他行上。

是否有任何已知的解决方法DataGrid的这种不寻常的行为,或者这可能是一个合法的控制错误?我已经完成了我的研究,至今我还没有发现任何东西。

任何帮助,将不胜感激。

谢谢!

回答

0

这是经典的鼠标进入/离开陷阱,这在很多Silverlight领域以及其他许多框架中都很常见。假定鼠标进入和退出事件会成对出现,但是当别的东西劫持鼠标事件时它们不会发生。

这就是这里发生的事情DataGridRow简单地使用标准鼠标事件跟踪鼠标。但是,当您在鼠标悬停状态下显示子窗口时,不会再有鼠标事件进入该行。当你关闭子窗口时,鼠标已经在行外,所以它仍然没有事件发生。

可能的解决方法是向孩子表明窗口前,与该行自己的视觉状态拨弄: -

VisualStateManager.GotoState(someRow, "NormalSelected", false); 

并不完美,但可能不够好。

+0

工程太棒了!谢谢! – killercolt 2010-11-25 14:02:07

相关问题