2017-06-26 6 views
0

Focusableプロパティをに設定しているので、データグリッドの最後の列が読み取り専用であり、タブを完全に無視するはずです。。データグリッドはカスタム化されていません。WPFデータグリッドのdouble tabingを取り除く

First tab

私はタブが最後の2つの列を無視してもらうcan't。 8列目から次の行の先頭にジャンプしたいと思います。代わりに、私は次の行に移動する前に、最後の2つの列をタブで移動する必要があります。

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

これは飛ばしたい列です。

セルスタイルは、私たちが上にXAMLでDataGridCellStyleで見るCellStyleに基づいています。

+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に設定しました。これにより、すべてのデータグリッド列で2番目のレベルのタブが削除されます。以前は、各列に2回タブをかけ、各インスタンスに点線の矩形が現れてから次の要素に移動しなければなりませんでした。 – axelrotter

+1

XAMLの関連部分を投稿してください。 –

+1

私は自分のコードで試してみました。おそらく、Datagrid.Columnsで共有する価値のあるものはどれですか? –

0

私はもう一度自分の質問に答えました。私は、テンプレートをデータグリッドのこの部分に適用すると、データグリッドセルは、TabManagerによってビジュアルツリーの2つのコントロールとして認識されるようです。だから、フォーカスビジュアルスタイルデータグリッドセル点線の長方形テンプレートフォーカスビジュアルスタイル連続長方形でした。だから、ここで学んだことは、あなたが絶対にしなければコントロールにテンプレートを適用すべきではないということです。興味があれば、データグリッドセルの新しい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> 
関連する問題