2017-06-26 86 views
0

最后我的数据网格的列是只读的,都应该完全忽略的标签,因为我的调焦属性设置为。数据网格不是自定义的,只是样式。入门在WPF数据网格摆脱双Tabing的

First tab

我不能让Tab键来忽略最后两列。我想从第8列跳到下一行的开头。相反,在进入下一行之前,我必须先浏览最后两列。

<Style x:Key="DataGridCellFocusVisualStyle"> 
    <Setter Property="Control.Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Rectangle StrokeThickness="2" 
          Stroke="{StaticResource DarkGrayBrush}" 
          SnapsToDevicePixels="true" 
          Margin="-5 0 0 0"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="BorderBrush" Value="{StaticResource DarkGrayBrush}" /> 
    <Setter Property="BorderThickness" Value="0 0 1 0" /> 
    <Setter Property="KeyboardNavigation.IsTabStop" Value="False"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <ContentControl Margin="5 0 0 0" Content="{TemplateBinding Content}" 
           FocusVisualStyle="{StaticResource DataGridCellFocusVisualStyle}"/> 

      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True" > 
      <Setter Property="Foreground" Value="{StaticResource BlackBrush}"/> 
      <Setter Property="Background" Value="{StaticResource WhiteBrush}"/> 
     </Trigger> 
     <Trigger Property="IsReadOnly" Value="True"> 
      <Setter Property="IsTabStop" Value="False"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

这是我想跳过的列。

单元格样式是基于我们在看到DataGridCellStyle在顶部的XAML的CellStyle。

<Style x:Key="CalculationNumericColumnCellStyle" 
     BasedOn="{StaticResource LeschacoDataGridCellStyle}" 
     TargetType="{x:Type DataGridCell}"> 
    <Setter Property="TextBlock.TextAlignment" Value="Right" /> 
</Style> 
+2

尝试设置IsTabStop = false –

回答

2

请尝试以下样式,它会跳过您放置的所有列IsReadOnly =“True”。

<Style TargetType="{x:Type DataGridCell}"> 
    <Style.Triggers> 
     <Trigger Property="IsReadOnly" Value="true"> 
      <Setter Property="IsTabStop" Value="False"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

好主意。这不起作用。没有触发器,我已经将TabStop设置为False。这消除了所有数据网格列上的第二级选项卡。我以前必须在每个列中选中两次,每个实例中出现一个虚线矩形,然后再转到下一个元素。 – axelrotter

+1

请问您可以发布XAML的相关部分吗? –

+1

我试着用你的代码,在我的最后工作得很好。也许值得在Datagrid.Columns中分享的东西? –

0

我又回答了我自己的问题。我看到,当我申请一个模板到数据网格中的这一部分,数据网格单元格似乎是在视觉树TabManager两个控件可以看出。所以焦点视觉样式的数据网格单元格虚线框模板焦点视觉样式连续矩形。所以,在这里学到的教训是,除非绝对必须,否则不应将模板应用于控件。如果有人感兴趣,请参阅Data Grid Cell的新XAML实现。

<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="BorderBrush" Value="{StaticResource DarkGrayBrush}" /> 
    <Setter Property="BorderThickness" Value="0 0 1 0" /> 
    <Setter Property="FocusVisualStyle" Value="{StaticResource DataGridCellFocusVisualStyle}"/> 
    <!--<Setter Property="VerticalAlignment" Value="Center"/>--> 
    <!--<Setter Property="Padding" Value="-20 0 0 0"/>--> 

    <Setter Property="Margin" Value="5 0 0 0"/> 
    <Style.Triggers> 
     <Trigger Property="DataGridCell.IsSelected" Value="True" > 
      <Setter Property="Background" Value="{StaticResource LightBlueBrush}"/> 
      <Setter Property="Foreground" Value="{StaticResource BlackBrush}"/> 
     </Trigger> 
     <Trigger Property="IsReadOnly" Value="True"> 
      <Setter Property="IsTabStop" Value="False"/> 
     </Trigger> 
    </Style.Triggers> 
</Style>