c# - 托管 DataGrid 时 WPF TabControl 无法切换选项卡
问题描述
默认情况下TabControl
,您可以使用Ctrl+切换选项卡Tab,但是如果其中一个选项卡包含DataGrid
它,则全部中断。例如,如果我有一个TabControl
只包含文本框的简单对象:
<TabControl>
<TabItem Header="Tab1">
<TextBox/>
</TabItem>
<TabItem Header="Tab2">
<TextBox/>
</TabItem>
<TabItem Header="Tab3">
<TextBox/>
</TabItem>
</TabControl>
并反复按Ctrl+ Tab,当前 Tab 将循环:
Tab1 > Tab2 > Tab3 > Tab1 > ...等
但是如果我将几乎任何DataGrid
一个放在中间的选项卡中,例如:
...
<TabItem Header="Tab2"> <!--replacing 2nd tab content-->
<TabItem.Resources>
<x:Array x:Key="Items" Type="{x:Type Run}">
<Run Text="Foo"/>
<Run Text="Bar"/>
<Run Text="Baz"/>
</x:Array>
</TabItem.Resources>
<DataGrid ItemsSource="{StaticResource Items}"/>
</TabItem>
Ctrl+Tab会卡住无法通过所说的选项卡:
Tab1 > Tab2 > Tab1 > Tab2 > ...等
我该如何解决这个问题?
我已经尝试IsTabStop="False"
了DataGrid
和几个KeyBoardNavigation
属性组合,所有这些都没有效果或适得其反。
编辑(2):问题似乎主要出现在DataGrid
是 的第一个可聚焦子项时TabItem
,例如内容:
<StackPanel>
<TextBox/>
<DataGrid ItemsSource="{StaticResource Items}"/>
</StackPanel>
几乎可以工作,直到用户选择DataGrid
. 如果选择了下一个网格Ctrl+Tab则返回到第一个选项卡而不是下一个选项卡。
解决方案
看起来这是一个焦点问题,当Datagrid
获得焦点时,它会从 中丢失TabControl
,因此每当按下 ctrl/tab 时,以编程方式设置焦点DataGrid
:
<TabControl x:Name="TabCtrl">
<TabItem Header="Tab1" x:Name="Tab1" >
<TextBox/>
</TabItem>
<TabItem Header="Tab3" x:Name="Tab2" PreviewKeyDown="UIElement_OnPreviewKeyDown">
<TabItem.Resources>
<x:Array x:Key="Items" Type="{x:Type Run}">
<Run Text="Foo"/>
<Run Text="Bar"/>
<Run Text="Baz"/>
</x:Array>
</TabItem.Resources>
<DataGrid ItemsSource="{StaticResource Items}" />
</TabItem>
<TabItem Header="Tab2" x:Name="Tab3">
<TextBox/>
</TabItem>
</TabControl>
处理程序:
private void UIElement_OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab &&
(Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && sender is TabItem)
{
TabCtrl.Focus();
}
}
推荐阅读
- swift - iOS13 的组合流在操作员使用调度程序后不流动
- java - 尝试访问 JNA 函数时出现 IllegalArgumentException
- c# - 检测并跟随玩家
- sql-server - SSRS - 矩阵报告的 OutOfMemory 异常
- sql - SQL Server 存储过程或重新启动 SQL Server 代理的替代方法
- highcharts - 如何自定义哪些项目出现在内置的 StockTools 工具栏中?
- mysql - 如果我有 MySQL (Xampp) 并安装 PostgreSQL,会有任何冲突吗?
- r - 如何快速对具有相同存根名称的多个列进行排序?
- excel - 切片器未填充在与表格不同的工作表上
- postgresql - 将存储库批量移动到 gitlab 内的另一个命名空间