2009-02-26 75 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

相关问题