【问题标题】:DataGrid Tabbing goes from cell to contentDataGrid Tabbing 从单元格到内容
【发布时间】:2012-04-12 16:39:38
【问题描述】:

我有一个主要由 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>

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

谢谢

【问题讨论】:

    标签: .net wpf xaml datagrid


    【解决方案1】:

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

    这只需两个步骤。

    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>
    

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

    【讨论】:

    • 这使问题更加严重。在使用 2 个选项卡将焦点集中到 DataGridTemplateColumn 内部的控件之前,现在选项卡完全跳过它,使得不使用鼠标就无法使用控件..
    • 这个解决方案效果很好。只是为了捕捉进入 Textbox 的选项卡,将 KeyboardNavigation.IsTabStop="True" 添加到 TextBox。
    【解决方案2】:

    你是对的,它似乎确实先关注DataGridTemplateColumn,然后再将焦点集中在其中的控件上。

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

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

    【讨论】:

    • 这不允许焦点通过按 Tab 离开控件。
    猜你喜欢
    • 2013-08-25
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2011-01-29
    • 2023-01-13
    • 2018-06-05
    相关资源
    最近更新 更多