gpt4 book ai didi

wpf - 在 WPF 数据网格中的列之间禁用制表位

转载 作者:行者123 更新时间:2023-12-03 19:55:31 25 4
gpt4 key购买 nike

我有一个带有多个列的 WPF Toolkit 数据网格。我正在尝试获得一种行为,您可以使用选项卡进入网格,然后使用单个选项卡再次退出。例如。我不想浏览网格的所有列或单元格,一次进入,一次退出。

是否有一个简单的解决方案,我尝试将 TabNavigation 设置为一次,同时禁用 TabStop(未在下面的代码中显示)并将列上的 TabNavigation 设置为 None,但没有成功。

有什么我遗漏的地方还是我需要处理代码中的 Tab 键?

        <my:DataGrid Name="datagrid"
AutoGenerateColumns="False" IsReadOnly="True"
CanUserAddRows="False" CanUserDeleteRows="False"
Background="White"
KeyboardNavigation.TabNavigation="Once">
<my:DataGrid.Columns>
<my:DataGridTextColumn x:Name="ID" Header="ID" Width="1*" ></my:DataGridTextColumn>
<my:DataGridTextColumn x:Name="Ticker" Header="Ticker" Width="1*" KeyboardNavigation.TabNavigation="None"></my:DataGridTextColumn>
<my:DataGridTextColumn x:Name="OfficialName" Header="Name" Width="3*" KeyboardNavigation.TabNavigation="None"></my:DataGridTextColumn>
</my:DataGrid.Columns>
</my:DataGrid>

最佳答案

有趣的是,直接在 DataGridTextColumn 上设置 KeyboardNavigation 不起作用。另一种可行的方法是设置 DataGridCell 样式。

<toolkit:DataGrid.CellStyle>
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Setter Property="KeyboardNavigation.IsTabStop"
Value="False" />
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="KeyboardNavigation.IsTabStop"
Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</toolkit:DataGrid.CellStyle>

将此附加到 DataGrid 将确保一个单元格只是一个 TabStop,如果它已经被选中。但是,如果您选择的是完整行并且没有在 DataGrid 上设置 SelectionUnit="Cell",它仍将循环浏览当前选定行的每一列。

相反,我们可以在 DataGrid 中创建多个 CellStyle 作为资源:
<toolkit:DataGrid.Resources>

<Style x:Key="SelectableCellStyle"
TargetType="{x:Type toolkit:DataGridCell}">
<Setter Property="KeyboardNavigation.IsTabStop"
Value="False" />
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="KeyboardNavigation.IsTabStop"
Value="True" />
</Trigger>
</Style.Triggers>
</Style>

<Style TargetType="{x:Type toolkit:DataGridCell}">
<Setter Property="KeyboardNavigation.IsTabStop"
Value="False" />
</Style>

</toolkit:DataGrid.Resources>

现在我们有一个默认应用于所有 DataGridCells 并关闭 TabStop 的样式,以及一个允许在选择单元格(或整个行)时进行选择的键控样式。将此样式仅应用于单个列将给我们提供相同的单选项卡效果,同时允许选择整行及其所有列。
 <my:DataGridTextColumn x:Name="ID" Header="ID" Width="1*" CellStyle={StaticResource  SelectableCellStyle}"/>

如果未选择任何内容,这也会停止切换到 DataGrid 中,这可能是首选或不首选,具体取决于您使用它的情况。

关于wpf - 在 WPF 数据网格中的列之间禁用制表位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2111281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com