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

有没有办法检查Silverlight中的DataGrid是否有焦点?,silverlight,datagrid,Silverlight,Datagrid,我有一个Silverlight数据网格,我需要检查它是否有焦点。我知道有一种方法可以为GotFocus设置焦点和事件,但是看不到任何东西来检查它是否有焦点 有什么想法吗?AFAIK没有直接的方法或属性来检查它是否有焦点,但是您应该能够使用FocusManager.GetFocusedElement() 如果随后定义扩展方法,则应该能够调用MyDataGrid.HasFocus(): [编辑:我现在确实测试过: 但是有一个问题:调用GetFocusedElement()可以返回DataGrid中当

我有一个Silverlight数据网格,我需要检查它是否有焦点。我知道有一种方法可以为GotFocus设置焦点和事件,但是看不到任何东西来检查它是否有焦点


有什么想法吗?

AFAIK没有直接的方法或属性来检查它是否有焦点,但是您应该能够使用FocusManager.GetFocusedElement()

如果随后定义扩展方法,则应该能够调用MyDataGrid.HasFocus():

[编辑:我现在确实测试过: 但是有一个问题:调用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;
    }
}

希望这能有所帮助?

AFAIK没有直接的方法或属性来检查它是否有焦点,但是您应该能够使用FocusManager.GetFocusedElement()

如果随后定义扩展方法,则应该能够调用MyDataGrid.HasFocus():

[编辑:我现在确实测试过: 但是有一个问题:调用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;
    }
}

希望这能有所帮助?

@Tjipke我遇到了类似的问题,但您的解决方案对我不起作用-GetFocusedElement()需要一个DependencyObject作为参数。您是否尝试了发布的源代码?是的,我尝试了我的源代码:-)silverlight版本的GetFocusedElement不需要该参数(请参阅),但是WPF版本需要。你在WPF里试过吗?在这种情况下,您不需要这些代码,只需使用DataGrid即可。IsFocused@Tjipke我有一个类似的问题,但您的解决方案不适用于我-GetFocusedElement()需要一个DependencyObject作为参数。您是否尝试了发布的源代码?是的,我尝试了我的源代码:-)silverlight版本的GetFocusedElement不需要该参数(请参阅),但是WPF版本需要。你在WPF里试过吗?在这种情况下,您不需要这些代码,只需使用DataGrid.IsFocused即可