0
我有一个Silverlight DataGrid,我需要检查它是否有焦点。我知道有一种方法可以为GotFocus设置焦点和事件,但无法查看是否有焦点。有什么办法检查Silverlight中的DataGrid是否有焦点?
任何想法?
我有一个Silverlight DataGrid,我需要检查它是否有焦点。我知道有一种方法可以为GotFocus设置焦点和事件,但无法查看是否有焦点。有什么办法检查Silverlight中的DataGrid是否有焦点?
任何想法?
AFAIK没有直接的方法或属性来检查它是否有焦点,但你应该能够使用FocusManager.GetFocusedElement()。
如果再定义一个扩展方法,你应该能够调用MyDataGrid.HasFocus():
public static class ControlExtensions
{
public static bool HasFocus(this Control aControl)
{
return System.Windows.Input.FocusManager.GetFocusedElement() == aControl;
}
}
[编辑:现在我没有测试它:] 但是有陷阱:在调用GetFocusedElement()可以返回DataGrid中当前聚焦的单元格。所以在这种情况下,HasFocus将返回false。
为了能够检查如果DataGrid或它的细胞之一的重点,我们可以调整我们的扩展方法是这样
public static class ControlExtensions
{
public static bool HasFocus(this Control aControl, bool aCheckChildren)
{
var oFocused = System.Windows.Input.FocusManager.GetFocusedElement() as DependencyObject;
if (!aCheckChildren)
return oFocused == aControl;
while (oFocused != null)
{
if (oFocused == aControl)
return true;
oFocused = System.Windows.Media.VisualTreeHelper.GetParent(oFocused);
}
return false;
}
}
希望这有助于一点?
谢谢 - 我会给它一个去。 – cyberbobcat 2009-02-26 12:48:42