有没有办法检查Silverlight中的DataGrid是否有焦点?
我有一个Silverlight数据网格,我需要检查它是否有焦点。我知道有一种方法可以为GotFocus设置焦点和事件,但是看不到任何东西来检查它是否有焦点有没有办法检查Silverlight中的DataGrid是否有焦点?,silverlight,datagrid,Silverlight,Datagrid,我有一个Silverlight数据网格,我需要检查它是否有焦点。我知道有一种方法可以为GotFocus设置焦点和事件,但是看不到任何东西来检查它是否有焦点 有什么想法吗?AFAIK没有直接的方法或属性来检查它是否有焦点,但是您应该能够使用FocusManager.GetFocusedElement() 如果随后定义扩展方法,则应该能够调用MyDataGrid.HasFocus(): [编辑:我现在确实测试过: 但是有一个问题:调用GetFocusedElement()可以返回DataGrid中当
有什么想法吗?AFAIK没有直接的方法或属性来检查它是否有焦点,但是您应该能够使用FocusManager.GetFocusedElement() 如果随后定义扩展方法,则应该能够调用MyDataGrid.HasFocus(): [编辑:我现在确实测试过: 但是有一个问题:调用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;
}
}
希望这能有所帮助?AFAIK没有直接的方法或属性来检查它是否有焦点,但是您应该能够使用FocusManager.GetFocusedElement() 如果随后定义扩展方法,则应该能够调用MyDataGrid.HasFocus(): [编辑:我现在确实测试过: 但是有一个问题:调用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;
}
}
希望这能有所帮助?@Tjipke我遇到了类似的问题,但您的解决方案对我不起作用-GetFocusedElement()需要一个DependencyObject作为参数。您是否尝试了发布的源代码?是的,我尝试了我的源代码:-)silverlight版本的GetFocusedElement不需要该参数(请参阅),但是WPF版本需要。你在WPF里试过吗?在这种情况下,您不需要这些代码,只需使用DataGrid即可。IsFocused@Tjipke我有一个类似的问题,但您的解决方案不适用于我-GetFocusedElement()需要一个DependencyObject作为参数。您是否尝试了发布的源代码?是的,我尝试了我的源代码:-)silverlight版本的GetFocusedElement不需要该参数(请参阅),但是WPF版本需要。你在WPF里试过吗?在这种情况下,您不需要这些代码,只需使用DataGrid.IsFocused即可