2017-05-11 13 views
0

DataGridに項目を追加するときに行スタイルを変更しようとしています。アイテムの追加時にDataGrid行スタイルを変更する

<DataGrid x:Name="datagrid1" HorizontalAlignment="Stretch" Height="auto" Margin="10,64,0,0" 
      VerticalAlignment="Stretch" Width="auto" AutoGenerateColumns="False" DataContext="{Binding}" ItemsSource="{Binding}"> 
    <DataGrid.ItemContainerStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding UIvisibility}" Value="-2"> 
        <Setter Property="Visibility" Value="Hidden"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding UIvisibility}" Value="-1"> 
        <Setter Property="Background" Value="Blue"/> 
        <Setter Property="Foreground" Value="White"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding UIvisibility}" Value="-0"> 
        <Setter Property="Background" Value="Transparent"/> 
        <Setter Property="Foreground" Value="Green"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.ItemContainerStyle> 
</DataGrid> 

KMS(I).LINE(7)、 "-2" が - " - 0"、 "1" 又は "1" の各KMS(I)の文字列として、アイテムに割り当てられます例えば.Visibility

kMS(1).line(7)="-1" 
kMS(4).line(7)="-0" 
kMS(369).line(7)="1" 
kMS(897).line(7)="-2" 

コードは以下の通りです

Dim c3 As DataGridTextColumn = New DataGridTextColumn 
c3.Binding = New System.Windows.Data.Binding("UIvisibility") 
c3.Visibility = 1 
datagrid1.Columns.Add(c3) 

Dim Additem(kMS.Length - 1) As Item 
For i = 0 To kMS.Length - 1 
    Additem(i) = New Item 
    Additem(i).Callback = kMS(i).line(8) 
    Additem(i).Keyboard = "No Assign" 
    If kMS(i).line(3).Remove(0, 2) <> "FFFFFFFF" Then 
     Additem(i).Keyboard = kMS(i).line(3).Remove(0, 2) 
    End If 

    Additem(i).UIvisibility = kMS(i).line(7) 

    datagrid1.Items.Add(Additem(i)) 
Next 

Public Class Item 
     Public Property Callback As String 
     Public Property Keyboard As String 
     Public Property UIvisibility As String 
End Class 

これはうまくいきません。その結果は、背景が透明で、前景が黒の行のみになります。

​​

私は何をしないのですか?

+0

オーケー。 Mahappsスタイルを無効にすることで、特定の行の色を変更できました。私はまた、[この回答](https://stackoverflow.com/questions/22526292/assigning-style-resources-to-a-datagrid)を参照してMahappsを有効にして同じことを行うことができました – chihirobelmo

答えて

0

問題のスクリーンショットを投稿すると役立ちます。

間違ったWPFコントロールのプロパティを変更したと思います。バックグラウンドを変更する場合、DataGridRowは、行のうち行によって覆われていない部分のみに問題ありません。これは、DataGridがすべての列よりも広い場合に発生します。

列の場合、DataGridCell、つまりTextBoxはDataGridRowにペイントされます。したがって、DataGridRowが透明でTextBoxが白の場合は、白い背景が表示されます。

この種の問題WPFはグラフィカル継承の使用をしばしば避けます。つまり、プロパティがコンテナに設定されている場合、そのプロパティに独自の値を書き込んでいないすべてのコントロールはコンテナから値を継承します。

残念ながら、DataGridの動作はまったく異なります。通常、グラフィカルな継承に頼らず、正しいコントロールをスタイルするなら、問題はなくなります。

2勧告

1)がスタイルを変更するためにトリガを使用しないでください。あなたは簡単にバインディングを使用してそれを行うことができます。

<datagrid.rowstyle> 
    <style targettype="DataGridRow"> 
    <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, 
     Path=Item.Quantity, Converter={StaticResource QuantityToBackgroundConverter}}"/> 
    </style> 
</datagrid.rowstyle> 

フォアグラウンドは、次のように行うことができる:データグリッドの書式を設定する

<Setter Property="Foreground" 
    Value="{Binding 
    RelativeSource={RelativeSource Self}, 
    Path=Text, 
    Converter={StaticResource QuantityToForegroundConverter}}" /> 

2)主要な頭痛の種です。私は数週間それを理解しようと過ごした。 、私の問題はMahappsから来ていたことができない は、内部の作品

www.codeproject.com: Guide to WPF DataGrid formatting using bindings

+0

私はOPにスクリーンショットを追加しました。列数はPCに接続されているゲーム制御デバイスの数に依存しますが、DataGridよりも広い場合がありますが、スクリーンショットのように白い背景にとどまっている場合もあります。私はこのコードを参照している[リンク](http://blog.okazuki.jp/entry/20100519/1274273555)各色を変更するには、 "UIvisibility"プロパティに依存します。私はcodeproject.comからあなたのソースコードをダウンロードし、今解決を探しています。助けてくれてありがとう。 – chihirobelmo

関連する問題