有没有办法检查Silverlight中的DataGrid是否具有焦点?

时间:2009-02-26 11:53:14

标签: silverlight datagrid

我有一个Silverlight DataGrid,我需要检查它是否有Focus。我知道有一种方法可以为GotFocus设置Focus和一个事件,但是看不到任何用于检查它是否有焦点的方法。

任何想法?

1 个答案:

答案 0 :(得分:3)

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;
    }
}

希望这有点帮助?​​