如何从silverlight数据网格的selectionchanged事件中显示自定义消息框?

时间:2010-11-24 20:38:13

标签: silverlight datagrid silverlight-4.0 childwindow

当用户在Silverlight中选择DataGrid中的行时,我想显示自定义确认消息框(ChildWindow)。消息框只有2个按钮,是和否。当用户单击否时,我想恢复DataGrid中以前选择的项目。我已经能够完成所有这些。

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

对于DataGrid的这种异常行为,是否有任何已知的解决方法,或者这可能是控件中的合法错误?我做了我的研究,到目前为止还没有找到任何东西。

任何帮助都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是经典的鼠标输入/离开问题,这在Silverlight的许多领域以及许多其他框架中都很常见。假设鼠标输入和输出事件将成对出现,但是当其他东西劫持鼠标事件时它们不会出现。

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

一种可行的解决方法是在显示子窗口之前自己调整行的可视状态: -

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

不完美但可能足够好。