DataGrid Tabbing从单元格到内容

时间:2012-04-12 16:39:39

标签: .net wpf xaml datagrid

我有一个主要由TemplateColumns组成的数据网格。我遇到的问题是,当通过行标签时,它似乎转到单元格,然后是单元格内的内容(即文本框或togglebutton)。理想的情况是,通过列的选项将重点放在内容上并跳过单元格。我可能正在解释发生的错误,但在视觉上似乎是这种情况。我试过了:

            <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>

但这并不像我想象的那样有效。任何人都可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:2)

你是对的,它似乎专注于DataGridTemplateColumn之前专注于标签内的控件。

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

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

答案 1 :(得分: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>

就是这样。这解决了所有问题。没有更多的工作,不需要增加课程。