簡體   English   中英

如何制作具有交替行顏色和固定顏色部分的WPF DataGrid(忽略交替)

[英]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答案進行了一些更改。 希望這對以后的人有所幫助。

  1. 從網格中拉出AlternatingRowBackground=... 添加AlternationCount="2"
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM