当用户在Silverlight中选择DataGrid中的行时,我想显示自定义确认消息框(ChildWindow)。消息框只有2个按钮,是和否。当用户单击否时,我想恢复DataGrid中以前选择的项目。我已经能够完成所有这些。
问题是,当出现消息框并且我单击否并且我恢复先前选择的项目时,用户尝试选择的项目将保持在MouseOver可视状态,直到我将鼠标移动到其他行上。
对于DataGrid的这种异常行为,是否有任何已知的解决方法,或者这可能是控件中的合法错误?我做了我的研究,到目前为止还没有找到任何东西。
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:0)
这是经典的鼠标输入/离开问题,这在Silverlight的许多领域以及许多其他框架中都很常见。假设鼠标输入和输出事件将成对出现,但是当其他东西劫持鼠标事件时它们不会出现。
就像这里发生的那样,DataGridRow使用标准鼠标事件简单地跟踪鼠标。但是,当您在鼠标悬停状态下显示子窗口时,不再有鼠标事件进入该行。当您关闭子窗口时,鼠标已经在行外,因此它仍然没有事件。
一种可行的解决方法是在显示子窗口之前自己调整行的可视状态: -
VisualStateManager.GotoState(someRow, "NormalSelected", false);
不完美但可能足够好。