0
我有一個Silverlight DataGrid,我需要檢查它是否有焦點。我知道有一種方法可以爲GotFocus設置焦點和事件,但無法查看是否有焦點。有什麼辦法檢查Silverlight中的DataGrid是否有焦點?
任何想法?
我有一個Silverlight DataGrid,我需要檢查它是否有焦點。我知道有一種方法可以爲GotFocus設置焦點和事件,但無法查看是否有焦點。有什麼辦法檢查Silverlight中的DataGrid是否有焦點?
任何想法?
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;
}
}
希望這有助於一點?
謝謝 - 我會給它一個去。 – cyberbobcat 2009-02-26 12:48:42