【发布时间】:2009-02-26 11:53:13
【问题描述】:
我有一个 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;
}
}
希望这会有所帮助?
【讨论】: