从WPF DataGrid中的特定列中删除焦点

时间:2012-04-23 21:53:38

标签: c# wpf datagrid

我有一个WPF DataGrid。

当用户按Tab键时,我不想把焦点放在第一列和第三列上,所以当我到达一行时,我应该在第二列,当我再次按Tab键并达到3列时,它会sholud move到第4栏。

我如何在WPF DataGrid中执行此操作

2 个答案:

答案 0 :(得分:5)

TabStopIndex值表示按Tab键时下一个应该获得焦点的字段。此外,您可以通过附加KeyboardNavigationIsTabStop附加属性来完全禁用控件的TabStop。

XAML:

<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
        <DataGrid.Resources>
            <Style x:Key="NoTabStopStyle" TargetType="{x:Type DataGridCell}">
                <Setter Property="KeyboardNavigation.IsTabStop" Value="False"/>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=FirstColumn}" CellStyle="{StaticResource NoTabStopStyle}"/>
            <DataGridTextColumn Binding="{Binding Path=SecondColumn}"/>
            <DataGridTextColumn Binding="{Binding Path=ThirdColumn}" CellStyle="{StaticResource NoTabStopStyle}"/>
        </DataGrid.Columns>
    </DataGrid>

答案 1 :(得分:0)

您可以停用这些列:

<Window.Resources>
    <Style x:Key="NotSelectableColumStyle" TargetType="{x:Type DataGridCell}">
        <Setter Property="IsEnabled" Value="False"/>
    </Style>
</Window.Resources>

<Grid Name="LayoutRoot">
     <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn   Binding="{Binding Path=Age}" />
            <!--<Disable this column>-->    
            <DataGridTextColumn   CellStyle="{StaticResource NotSelectableColumStyle}" Binding="{Binding Path=Name}" />
            <DataGridTextColumn  Binding="{Binding Path=Address}" />
        </DataGrid.Columns>
    </DataGrid>
 </Grid>