我有两个UserControls
一个有TreeView
,另一个有Button
和DataGrid
。
我想要实现的是Tab
上的TreeViewItem
应该在第二个UserControl中将KeyBoard Focus赋予DataGrid。
我已经查看了不同的帖子,但没有运气。在下面找到我的XAML,
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<UC:ExplorerView DataContext="{Binding ExplorerViewModel}" Grid.Row="0"/>
<UCs:TableOfContentView DataContext="{Binding TableOfContentViewModel}" x:Name="TOCView" Grid.Row="1"/>
</Grid>
问题的简化XAML。
我尝试通过添加事件UserControl
PreviewKeyDown
private void ExplorerView_KeyDown(object sender, KeyEventArgs e)
{
if(e.Key == Key.Tab)
{
Keyboard.Focus(TOCView);
}
}
但是,如上所述,这会将焦点放在USerControl而不是DataGrid上。
尝试Attach
Property
DataGrid
。它按预期工作但没有把重点放在first row
上。 this thread给出了输入。
解决了:)
创建了上面线程中提到的AttachedProperty
并修改了回调方法,将焦点设置为DataGrids
第一行,如下所示,
private static object OnCoerceValue(DependencyObject d, object baseValue)
{
if (((DataGrid)d).HasItems)
{
DataGridRow row = ((DataGrid)d).ItemContainerGenerator.ContainerFromIndex(0) as DataGridRow;
if(row !=null)
{
if ((bool)baseValue)
{
FocusManager.SetIsFocusScope(row, true);
FocusManager.SetFocusedElement(row, row);
}
else if (((UIElement)d).IsFocused)
Keyboard.ClearFocus();
}
}
return ((bool)baseValue);
}
请随意添加更好的解决方案。在此先感谢。
答案 0 :(得分:0)
创建了上面线程中提到的Ñ
并修改了回调方法,将焦点设置为AttachedProperty
第一行,如下所示,
DataGrids