[英]Alternating row colors on LoadingRow event in WPF DataGrid doubling colors on rows
[英]WPF DataGrid Alternating Column Colors
我正在嘗試創建具有交替背景顏色的WPF DataGrid。 我目前正在使用DataGridTemplateColumn列並設置CellStyle背景顏色,但對此結果並不完全滿意:
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="False">
<Setter Property="Background" Value="#FFF7F7F7" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTemplateColumn.CellStyle>
我正在從現有的WinForms項目建模我的DataGrid,並試圖復制它的外觀。 我面臨兩個問題:
不同的列背景附加到單元格,而不是網格本身的屬性。 因此,未使用的行不顯示這些背景。 我甚至想要一個空的網格來顯示列和背景。
列背景應擴展到透明的Expander標頭下。 我相信如果(1)得到滿足,這也會有效。
可以直接使用DataGrid實現這些目標嗎? 如果沒有,可以通過哪些解決方法來解決問題; 也許以某種方式直接在DataGrids面板上繪制列背景(DataGridRowsPresenter)並支持列調整大小?
有任何想法嗎? 謝謝!
注意:此問題類似且未得到答復: WPF Datagrid模板列編輯事件和交替列顏色
此更新基於@LeslieDavies的建議答案,它讓我大部分時間都在這里。 這個解決方案有兩個問題:
我無法對DataGrid列進行星型調整。 如果我嘗試星大小,那么這些列會連續不斷地增長。
如果我從XAML中刪除DataGrid.GroupStyle
,則調整大小不再正常。 矩形正確生長,但縮小列時,Rectangle縮小但Grid列不能正確收縮。
XAML:
<Window x:Class="GridColumnColors.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Background="Black">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Rectangle Name="Rect0" Grid.Column="0" HorizontalAlignment="Left" Margin="-1,0,0,0" Fill="#FFCACACA" />
<Rectangle Name="Rect1" Grid.Column="1" HorizontalAlignment="Left" Margin="-1,0,0,0" Fill="White"/>
<Rectangle Name="Rect2" Grid.Column="2" HorizontalAlignment="Left" Margin="-1,0,0,0" Fill="#FFCACACA"/>
<DataGrid Name="DataGridStudents" AutoGenerateColumns="False" Visibility="Visible" Grid.ColumnSpan="4" ItemsSource="{Binding StudentsCollectionView}"
SelectionMode="Extended" GridLinesVisibility="None" RowHeaderWidth="0" RowBackground="Transparent"
CanUserResizeRows="False" IsReadOnly="True" Background="Transparent" LayoutUpdated="Students_LayoutUpdated">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander Header="{Binding}">
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" MinWidth="100" Binding="{Binding FirstName}"/>
<DataGridTextColumn Header="Last Name" MinWidth="100" Binding="{Binding LastName}"/>
<DataGridTextColumn Header="Age" MinWidth="100" Binding="{Binding Age}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
代碼背后:
private void Students_LayoutUpdated(object sender, EventArgs e)
{
Rect0.Width = DataGridStudents.Columns[0].ActualWidth+3;
Rect1.Width = DataGridStudents.Columns[1].ActualWidth+0;
Rect2.Width = DataGridStudents.Columns[2].ActualWidth+1;
}
這不是一個優雅的解決方案,但它可以為您提供所需的視圖。
在LayoutChanged事件的代碼中,更新矩形的寬度。 例如:
rectangle.Width = dataGrid.Columns [0] .Width.DesiredValue;
由於DataGrid樣式,給第一個矩形一個(7,0,0,0)的邊距。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.