c# - DataGrid CellTemplate TabNavigation

标签 c# silverlight xaml datagrid

我假设之前有人问过这个问题,但我找不到它,所以请告诉我它是否与其他措辞或其他内容一起找到了重复项。

问题出在包含多个 CellTemplate 的 SL4 DataGrid,包括 CheckboxButton 等。默认情况下,它只会在第一行的这些元素之间切换。如果我设置 TabNavigation="Cycle",它会在所有元素之间切换,但它不会移动到下一个元素,而只是在同一个 DataGrid 中重复切换。

如果我将它设置为 Once 然后它只会在第一行中切换....并且 SL4 似乎没有 Continue 移动选项一旦到达边缘,就会进入下一个对象。

我正在寻找一种简单的方法来获取 TabNavigation="Cycle" 的等价物,除非它到达 DataGrid 中最后一个可制表符的元素然后它移动到树中的下一个元素,而不是再次跳回到 DataGrid 中的第一个元素。我在这里缺少什么?

最佳答案

似乎没有在 Silverlight 中执行此操作的 native 方法,这里是数据网格控件中支持的击键列表:http://msdn.microsoft.com/en-us/library/cc838112(v=vs.95).aspx

我能够通过使用 KeyDown 事件并检查 Tab 然后手动设置编辑单元格来伪造它:

<Grid x:Name="LayoutRoot"  >
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <TextBox Grid.Row="0" Text="Some text" />
    <sdk:DataGrid Grid.Row="1" ItemsSource="{Binding People}" AutoGenerateColumns="False" KeyDown="DataGrid_KeyDown">
        <sdk:DataGrid.Columns>
            <sdk:DataGridTemplateColumn>
                <sdk:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding FirstName}" />
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellEditingTemplate>
            </sdk:DataGridTemplateColumn>
            <sdk:DataGridTemplateColumn>
                <sdk:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding LastName}" />
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellEditingTemplate>
            </sdk:DataGridTemplateColumn>
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>
    <TextBox Grid.Row="2" Text="Some more text" />
</Grid>

    private void DataGrid_KeyDown(object sender, KeyEventArgs e)
    {
        DataGrid dg = (DataGrid)sender;
        ObservableCollection<Person> items = dg.ItemsSource as ObservableCollection<Person>;
        if (e.Key == Key.Tab && dg.SelectedIndex < items.Count -1)
        {
            dg.SelectedIndex++;
            dg.CurrentColumn = dg.Columns[0];
            dg.BeginEdit();
            var cell = dg.CurrentColumn.GetCellContent(dg.SelectedItem);
        }
    }

关于c# - DataGrid CellTemplate TabNavigation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702916/

相关文章:

c# - 如何在 MarkupExtension 的设计时获取静态资源值?

wpf - 'System.Windows.Data.Binding' 类型的对象无法转换为 'System.String' 类型

c# - 为什么 c# 将 0 视为 int 而不是 short/decimal 等?

c# - 在 Silverlight/WP7 应用程序中使用 MultiTouchBehavior 时,如何以编程方式查找缩放、旋转和平移值?

c# - 使用带有偏移的 RotateTransform 问题旋转图像

Silverlight 组合框问题

android - 如何在堆栈布局或框架中添加点击事件

c# - 将字符串转换为双重异常

c# - 当未选择行时,复选框列第一次不会更改其状态

c# - 如何使用 Entity Framework 在现有的 SQL Server 数据库中创建一个表?