2010-12-28 7 views
43

DataGridを行選択モード(つまり、SelectionUnit="FullRow")で使用しています。私は、真の行選択(セルレベル選択なし)を行うために、ユーザーが行をハイライト表示したときに現在のセルの周りに配置されている境界線を削除したいだけです。私は現在のセルを維持しているグリッドの概念を気にしません。おそらく現在のセルのスタイルを変更することによって、その厄介な現在のセルの境界線を削除したいだけです。これを行う最も簡単な方法は何ですか?FullRow選択モードでDataGridの現在のセルの境界線を無効にする

答えて

88

あなたはDataGridCellテンプレートを上書きして、ためmultitriggerを追加することができますが、セルが編集可能な場合にのみ、境界線を表示したい場合は0

<DataGrid ... 
      SelectionUnit="FullRow"> 
    <DataGrid.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="BorderThickness" Value="0"/> 
      <!-- Update from comments. 
       Remove the focus indication for the selected cell --> 
      <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
     </Style> 
    </DataGrid.CellStyle> 
    <!-- ... --> 
</DataGrid> 
+1

ユーザーが矢印キーを使用している場合、これは機能しません。点線の選択枠は、セル内にまだ表示されます。 –

+14

@Michael Yanni:あなたは 'FocusVisualStyle'について話しています。それを無効にするには、 'のように' CellStyle'でnullに設定してください。 –

+0

ボーダーセットで0? – ygoe

6
<Style x:Key="DataGrid" TargetType="DataGrid"> 
    <Setter Property="CellStyle"> 
     <Setter.Value> 
      <Style TargetType="DataGridCell"> 
       <Setter Property="BorderThickness" Value="0"/> 
       <Setter Property="Foreground" Value="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}" /> 
       <Setter Property="Background" Value="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" /> 
      </Style> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

これらの2行を追加すると、ResourceDictionary、thanks @mariusによって適用されるスタイルを維持できます。 – Rachel

0

DataGridCellためBorderThicknessを設定し、選択した可能性がありセルはIsSelectedで、IsReadOnlyではありません。あなたが列またはDataGridの

<ControlTemplate x:Key="MellowDataGridCellTemplate" TargetType="{x:Type DataGridCell}"> 
    <Grid> 
     <ContentPresenter VerticalAlignment="Center" /> 
     <Rectangle Name="FocusVisual" Stroke="White" StrokeThickness="1" Fill="Transparent" HorizontalAlignment="Stretch" 
          VerticalAlignment="Stretch" IsHitTestVisible="false" Opacity="0" /> 

    </Grid> 
    <ControlTemplate.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="IsReadOnly" Value="False" /> 
       <Condition Property="IsSelected" Value="True" /> 
      </MultiTrigger.Conditions> 
      <Setter TargetName="FocusVisual" Property="Opacity" Value="1"/> 
     </MultiTrigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

<Style TargetType="{x:Type DataGridCell}" x:Key="MellowGridDataGridCell"> 
    <Setter Property="Template" Value="{StaticResource MellowDataGridCellTemplate}" /> 
</Style> 

スタイルでテンプレートを使用して、スタイル

<DataGrid CellStyle={StaticResource MellowGridDataGridCell > 
    ... 
</DataGrid> 
0

を使用するために、真のIsReadOnlyの=を設定した場合、その後何の境界線はセルに表示されませんxceedDataGridControlを使用している場合はNavigationBehaviorRowOnly

に設定してください
<xcdg:DataGridControl NavigationBehavior="RowOnly" SelectionMode="Single" .... 
7

ここでもう一度答えてみましたが、これは近いですが、フォーカス矩形を取り除いていませんでした。すべての罫線を削除する方法は次のとおりです。

また
<DataGrid.Resources> 
    <Style TargetType="{x:Type DataGridCell}"> 
     <Setter Property="BorderThickness" Value="0" /> 
     <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    </Style> 
</DataGrid.Resources> 

、技術的にこれらの細胞は、まだ次の行にタブキー事前の代わりに、次のセルを作るために、(あなたはそれを見ていない)、フォーカスを得るか、私はに基づいてセルのスタイルを定義するため、次のものも追加します。

<DataGrid.Resources> 
    <Style x:Key="NoFocusDataGridCell" TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}"> 
     <Setter Property="Focusable"  Value="False" /> 
     <Setter Property="IsTabStop"  Value="False" /> 
     <Setter Property="IsHitTestVisible" Value="False" /> 
    </Style> 
</DataGrid.Resources> 

...次に、最初の列定義以外のすべてに適用します。こうすると、タブキーは次の行に移動し、次のセルには移動しません。

しかし、国境に戻る。それらを隠したいが、スペーシングの理由でレイアウトの一部にしたい場合は、上記を次のように変更してください。

<DataGrid.Resources> 
    <Style TargetType="{x:Type DataGridCell}"> 
     <Setter Property="BorderBrush" Value="Transparent" /> 
     <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    </Style> 
</DataGrid.Resources> 

お楽しみください! :)

+0

これはもっと近いですが、まだ注意が必要です。カラム0をクリックすると、アクティブな選択ハイライトブラシが(予想どおり)表示されますが、カラム1+をクリックすると非アクティブな選択ハイライトブラシ(予期せぬ)が表示されます。アクティブなブラシは、0桁目をクリックするまでスティックします(他の行をクリックすると)。アクティブブラシは、DataGridがフォーカスを失うまでスティックします。 –

+0

興味深い。私はそれを前に見ていないが、私は今それを間違いなく試してみるだろう。しかし、私がそれを追加した理由は、タブ順序を修正するためでした。つまり、修正はfocusable = falseからistabstop = falseに変更するだけの簡単な方法かもしれません。それは同じことを達成するはずです。 – MarqueIV

+0

私は 'IsTabStop =" False "の調整を試みただけで、すべてのケースをカバーしているようです。技術的には、非最初の列のセルは、クリックするとフォーカスを受け取り、左/右に移動して他のセルにフォーカスを移動できますが、タブは次の行の最初のセルまたは次のコントロールに移動します(最後の行のセルの1つにフォーカスがある場合) 。しかし、私はそれが問題だとは思わない。多分スクリーンリーダーにとって?とりあえずありがとう! –

関連する問題