[英]Alternating row colors on LoadingRow event in WPF DataGrid doubling colors on rows
[英]How to make a WPF DataGrid with alternating row colors, and a fix color section (ignoring alternation)
我有一個要嘗試使其類似於的數據網格:
我正在使用AlternatingRowBackground
屬性執行交替的顏色。 對於固定顏色部分,我具有類似於以下內容的XAML:
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ShouldBeFixedColor}" Value="True">
<DataTrigger.Setters>
<Setter Property="Background" Value="Blue" />
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
這種方法的問題在於,“替代顏色”優先於固定顏色樣式觸發器。 因此,在底部而不是藍色-藍色-藍色是藍色-灰色-藍色。
關於如何存檔所需顏色的任何想法? 如果可能的話,我寧願在XAML級別上做所有這些事情。
謝謝!
根據其他SO答案進行了一些更改。 希望這對以后的人有所幫助。
AlternatingRowBackground=...
添加AlternationCount="2"
在下面添加塊以進行樣式設置(手動執行交替的行)
<DataGrid.RowStyle> <Style TargetType="{x:Type DataGridRow}"> <Style.Triggers> <Trigger Property="AlternationIndex" Value="0"> <Setter Property="Background" Value="White" /> </Trigger> <Trigger Property="AlternationIndex" Value="1"> <Setter Property="Background" Value="WhiteSmoke" /> </Trigger> <DataTrigger Binding="{Binding Path=Selectable}" Value="False"> <DataTrigger.Setters> <Setter Property="Background" Value="LightGray" /> </DataTrigger.Setters> </DataTrigger> </Style.Triggers> </Style> </DataGrid.RowStyle>
如果其他人也在尋找用代碼完成的相同事情:
Style rowStyle = new Style(typeof(DataGridRow));
Trigger rowTrigger = new Trigger();
rowTrigger.Property = DataGridRow.AlternationIndexProperty;
rowTrigger.Value = 0;
Setter rowSetter = new Setter(DataGridRow.BackgroundProperty, Brushes.Yellow);
rowTrigger.Setters.Add(rowSetter);
Trigger alternateRowTrigger = new Trigger();
alternateRowTrigger.Property = DataGridRow.AlternationIndexProperty;
alternateRowTrigger.Value = 1;
Setter alternateRowSetter = new Setter(DataGridRow.BackgroundProperty, Brushes.Pink);
alternateRowTrigger.Setters.Add(alternateRowSetter);
DataTrigger rowDataTrigger = new DataTrigger();
rowDataTrigger.Value = true;
rowDataTrigger.Binding = new Binding() { Path = new PropertyPath(nameof(MyObject.IsSomethingTrue))};
Setter backgroundSetter = new Setter(DataGridRow.BackgroundProperty, Brushes.Blue);
Setter foregroundSetter = new Setter(DataGridRow.ForegroundProperty, Brushes.White);
rowDataTrigger.Setters.Add(backgroundSetter);
rowDataTrigger.Setters.Add(foregroundSetter);
// the order of the triggers may not be changed as explained by CptCoathanger
rowStyle.Triggers.Add(rowTrigger);
rowStyle.Triggers.Add(alternateRowTrigger);
rowStyle.Triggers.Add(rowDataTrigger);
RootDataGridOrders.RowStyle = rowStyle;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.