2016-04-11 125 views
0

私はデータを表示するためにWPFデータグリッドを使用しています。私は、(私は動的に生成された列を使用しています)最後に空のスペースがある場合、最後に空の列/スペースを含め、アイテムがクリックされたときに行全体を強調表示する方法を把握しようとしています。注意してください、私は特定のセルだけを強調表示しようとしていません。このhttp://imgur.com/7Xjoj2Hは私が見ているものです。行の最後にある未使用スペースは、現在列がなく、強調表示されていないスペースです。その行がクリックされたときにそのスペースも強調表示されたいです。私は試した:WPF DataGridが行全体をハイライト表示

残りのスペースを埋めるためにautoの最後の列に幅を設定する。これは、動的に作成された列を使用しているので、これを行うと水平スクロールバーが無効になるため、私にとってはうまくいかない。

私もDataGridRowsのスタイルを追加しようとしました

<Trigger Property="IsSelected" 
       Value="true"> 
      <Setter Property="Background" 
        Value="{StaticResource SelectedBrush}" /> 
     </Trigger> 

作品のこの種を、ものの、時にデータグリッドのロード、または私のプログラムに焦点が合っていないとき、それは次のようになります。http://imgur.com/EtTmBbH場所未使用領域の最後の領域のみが強調表示されます。

可能であれば、空白のダミー列を最後に追加するだけで回避できないので、最後の列幅をautoに設定するのと同じ問題が発生する可能性があります。

提案がありますか?

編集:ここでは

がDataGridRowスタイル用のコードです:

<Style TargetType="{x:Type DataGridRow}" 
     x:Key="DataGridRowStyle"> 

    <Setter Property="Background" 
      Value="White" /> 

    <Style.Triggers> 
     <Trigger Property="AlternationIndex" 
       Value="1"> 
      <Setter Property="Background" 
        Value="#efefef" /> 
     </Trigger> 

     <Trigger Property="IsMouseOver" 
       Value="true"> 
      <Setter Property="Background" 
        Value="{StaticResource RolloverBrush}" /> 
     </Trigger> 
     <Trigger Property="IsSelected" 
       Value="true"> 
      <Setter Property="Background" 
        Value="{StaticResource SelectedBrush}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

そして、選択したブラシ:

<LinearGradientBrush x:Key="SelectedBrush" 
        StartPoint="0,0" 
        EndPoint="0,1"> 
    <GradientStop Offset="0" 
        Color="#3399FF" /> 
</LinearGradientBrush> 

DataGridのコード:

 <DataGrid x:Name="JobListView" 
       AutoGenerateColumns="False" 
       ItemsSource="{Binding UnitStatusCollection, Mode=TwoWay}" 
       CanUserDeleteRows="False" 
       Style="{StaticResource JobGridViewStyle}" 
       SelectedIndex="{Binding JobsListViewSelectedIndex, Mode=TwoWay}" 
       SelectedItem="{Binding JobsListViewSelectedUnitStatusPair}" 
       Utility:DataGridColumnsBehavior.BindableColumns="{Binding DataGridColumns}" 
       ContextMenu="{StaticResource ListViewContextMenu}" 
       Margin="10,0" 
       Grid.Row="1" 
       HorizontalAlignment="Stretch" 
       HorizontalContentAlignment="Stretch" 
       RowStyle="{StaticResource DataGridRowStyle}" 
       AlternationCount="2" 
       HorizontalGridLinesBrush="#5A5A5F" 
       VerticalGridLinesBrush="#5A5A5F"> 
+0

"DataGridRows"に 'Style'タグを表示できますか? –

+0

投稿を編集して表示 – KSF

+0

グリッドにどのように適用していますか?あなたのコードは、 'RowStyle =" {StaticResource DataGridRowStyle} "'でDataGrid上で動作します。 –

答えて

1

あなたはyの明確なデフォルトのハイライトの色、あなたのSelectedBrushが代わりに使用されるように:

<DataGrid ...> 
     <DataGrid.Resources> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#00000000"/> 
      <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#00000000"/> 
     </DataGrid.Resources> 
    </DataGrid> 
+0

私はそれを試みました、私はオレンジ色に設定しました。今度は、行を強調表示すると、http://imgur.com/HQH8wvj(SolidColorBrushの色をオレンジ色に割り当てました)のようになります。選択したブラシがその色を塗っているので、青がそこにあります。私が理解できないのは、行のペイントの動作に関して、列が最後の空のスペースとは異なって扱われる理由/方法です。 – KSF

+0

DataGridがSystemColors.HighlightBrushKeyを使用して既存の列が占有する行の一部をハイライト表示するようです。私はオレンジの代わりにHighlightBrushKeyを透明にすることをお勧めしますし、SelectedBrushを任意の色に変更してください。 –

+1

また、DataGridの行は2つの部分で構成され、そのうちの1つはセルで占められ、2つ目はセルではありません。同じSelectedBrushでCellStyleを設定することもできます。その場合、セルは適切な色で強調表示されます。 –

2

この作業を行うためには、私はアントンの提案を使用:

また、データグリッド内の行は、2つの部分で構成されていそれらのうちの1つは細胞によって占有され、第2の細胞は細胞によって占有されない。同じSelectedBrushでCellStyleを設定することもできます。その場合、セルは適切な色で強調表示されます。私が何をしたか

DataGridCellStyleのスタイルを作りましたし、IsSelectedのトリガー製:

<Style x:Key="DataGridCellStyle" 
     TargetType="{x:Type DataGridCell}"> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" 
       Value="True"> 
      <Setter Property="Background" 
        Value="{StaticResource SelectedBrush}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

セルの背景に選択された行の背景と同じ色を塗ります。これは有することに加えている。

<Style TargetType="{x:Type DataGridRow}" 
     x:Key="DataGridRowStyle"> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" 
       Value="true"> 
      <Setter Property="Background" 
        Value="{StaticResource SelectedBrush}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

これは負荷時やプログラムがフォーカスを失った行全体にわたって延在する塗装色を可能にします。

1

私は別の解決策を見つけたが、それは実際には少し簡単です:

<DataGrid.Resources> 
    <!-- Select everything with orange... --> 
    <SolidColorBrush 
     Color="#ff9933" 
     x:Key="{x:Static SystemColors.HighlightBrushKey}" /> 
    <!-- ...all the time --> 
    <SolidColorBrush 
     Color="#ff9933" 
     x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" /> 
</DataGrid.Resources> 

問題は、行全体がハイライトだったが、フォーカスが失われたとき、「未選択」細胞はで強調表示されたということでした異なる色:非アクティブな選択ハイライトの色。

行末のデッドエリアバックグラウンドは、IsSelected=Trueトリガーによって設定されています。それを取り除くと、死んだ領域はまったく「選択」されません。そのためには、異なる色の3色、HighlightBrushKeyInactiveSelectionHighlightBrushKeyを使用してください。

アントン・ダニロフは非常に近くにあった。しかし答えは、ブラシを透明にすることではなく、あなたが望む色にすることです。