2009-02-26 104 views

回答

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

希望這有助於一點?

+0

謝謝 - 我會給它一個去。 – cyberbobcat 2009-02-26 12:48:42

相關問題