1

我有一个主要由 TemplateColumns 组成的数据网格。我遇到的问题是,在浏览行时,它似乎转到单元格,然后是单元格内的内容(即文本框或切换按钮)。理想的情况是在列中使用 Tab 键将焦点放在内容上并跳过单元格。我可能会错误地解释正在发生的事情,但从视觉上看似乎是这样。我试过了:

            <DataGridTemplateColumn Header="Group Value"
                                    MinWidth="30"
                                    Width=".02*">
                <DataGridTemplateColumn.CellStyle>
                    <Style TargetType="{x:Type DataGridCell}">
                        <Setter Property="IsTabStop"
                                Value="False" />
                    </Style>
                </DataGridTemplateColumn.CellStyle>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding SomeBinding, 
                                                ValidatesOnDataErrors=True, 
                                                UpdateSourceTrigger=PropertyChanged}"
                                 IsReadOnly="{Binding RelativeSource={RelativeSource FindAncestor, 
                                               AncestorType={x:Type DataGrid}}, 
                                               Path=DataContext.IsReadOnly}"
                                 Style="{StaticResource TextBoxStyle}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

但这并不像我想象的那样有效。谁能帮我?

谢谢

4

2 回答 2

3

我尝试了很多我在不同博客中找到的东西,但没有奏效。但后来我发现了一种简单而有效的技术,它像冠军一样工作!!!

这只需要2个步骤。

1. 在资源文件中添加样式:

<!-- Cell Editing For DataGrid-->
<Style x:Key="CellEditingStyle" TargetType="DataGridCell">
    <Setter Property="IsTabStop" Value="False" />
</Style>

2. 在您的数据网格中添加此样式:

<DataGridTemplateColumn Header="{DynamicResource grdLoadsPerMonths}"
                        CellStyle="{StaticResource CellEditingStyle}">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Path=LoadsPerMonth, UpdateSourceTrigger=LostFocus}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

这就对了。这解决了所有问题。没有更多的工作,没有更多的类需要添加。

于 2013-05-16T18:46:39.370 回答
2

你是对的,它似乎确实DataGridTemplateColumn在它关注它之前的控件之前关注它。

在寻找解决方案时,我遇到了这个:http: //iyalovoi.wordpress.com/2009/08/21/wpf-datagrid-tabbing-from-cell-to-cell-does-not-set-focus-控制/

您可以将 附加FocusAttacher到模板列中的控件,它将从中窃取焦点。它对我很有用。

于 2012-04-12T16:58:30.460 回答