1

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

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

DataGrid 的这种异常行为是否有任何已知的解决方法,或者这可能是控件中的合法错误?我已经完成了我的研究,但我还没有发现任何东西。

任何帮助,将不胜感激。

谢谢!

4

1 回答 1

0

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

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

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

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

不完美但可能足够好。

于 2010-11-24T20:55:09.063 回答