2009-02-26 19 views

cevap

3

AFAIK, odağı olup olmadığını kontrol etmek için doğrudan bir yöntem veya özellik yoktur, ancak FocusManager.GetFocusedElement() yöntemini kullanabilmeniz gerekir. sonra bir uzantısı yöntemi tanımlarsanız

, sen MyDataGrid.HasFocus() aramak gerekir:

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

[düzenlendi: Ben Şimdi test etmedi:] Ancak sorun var: çağrı GetFocusedElement(), DataGrid içindeki mevcut odaklanmış hücreyi döndürebilir. Yani bu durumda HasFocus yanlış döner.

DataGrid veya hücrelerinden biri odaklı, biz bu biraz yardımcı olur bu

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

Hope gibi bizim uzatma yöntemini uyarlayabilir kontrol edebilmek için mi?

+0

Teşekkürler - Vereceğim. – cyberbobcat

+0

Peki umarım görürsünüz biraz ... – Tjipke

+0

Evet, bu yardımcı olur - tekrar teşekkürler. – cyberbobcat

İlgili konular