一千萬個為什麽

搜索

有沒有辦法檢查Silverlight中的DataGrid是否有焦點?

我有一個Silverlight DataGrid,我需要檢查它是否有焦點。我知道有一種方法可以為GotFocus設置焦點和事件,但無法查看是否有焦點。

有任何想法嗎 ?

最佳答案

AFAIK沒有直接的方法或屬性來檢查它是否有焦點,但你應該能夠使用FocusManager.GetFocusedElement()。

如果你定義了一個擴展方法,你應該可以調用MyDataGrid.HasFocus():

public static class ControlExtensions
{
    public static bool HasFocus(this Control aControl)
    {
        return System.Windows.Input.FocusManager.GetFocusedElement() == aControl;
    }
}

[edited: I did test it now:] However there is catch: the call GetFocusedElement() can return the current focused cell within the DataGrid. So in that case the HasFocus will return 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;
    }
}

希望這個對你有幫助?

轉載註明原文: 有沒有辦法檢查Silverlight中的DataGrid是否有焦點?