【发布时间】:2018-05-24 21:37:01
【问题描述】:
我有一个包含很多列的数据网格。现在通常用户可以按 TAB 键在 DataGrid 单元格中的控件之间循环。数据网格单元格已设置为 IsTabStop = false,因此它跳过了对单元格本身的关注,并且它只是落空,直到将焦点提供给实际控件。
如果用户按 Enter 键,这似乎不起作用,因为他们想在同一列中工作。 DataGrid 会将焦点传递给 COLUMN 中的下一个单元格,但它也会忽略 IsTabStop 设置,因此它只是将焦点赋予单元格本身而不是内部的控件。
关于如何解决这个问题的任何想法。
简短的例子
<DataGrid AutoGenerateColumns="False" Name="grid1" >
<DataGrid.Resources>
<Style TargetType="{x:Type Border}" x:Key="coloredBorder">
<Setter Property="Background" Value="Yellow"/>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="IsTabStop" Value="False"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding A, Mode=OneWay}" Header="A"/>
<DataGridTemplateColumn Header="B">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border BorderBrush="Black" BorderThickness="0,0,1,0" Width="20" Height="20" Style="{DynamicResource coloredBorder}"/>
<ComboBox Grid.Column="1" SelectedItem="{Binding A, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding MenuItems, ElementName=window}"></ComboBox>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我还为此here 附加了示例WPF 应用程序。要重现,请单击其中一个组合框以使其成为焦点。按选项卡,您会看到下一个组合框正常获得焦点。如果我添加了多个组合框列,右侧的组合框将获得焦点。
但是如果你按下回车键,焦点会转到下面的单元格,但它不会跳过单元格并转到单元格内容。而是突出显示单元格。 像这样:
【问题讨论】: