C# 动态列的备用列背景
A将C# 动态列的备用列背景,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,A将DataGrid和ItemsSource设置为DataTable和AutoGenerateColumns=“True”: 如何在其中创建备用列背景?我看到的每个解决方案都只适用于静态列 我不使用代码隐藏,所以首选XAML唯一的解决方案,但我对每个有价值的答案都很满意。您可以将DataGridCell.Column.DisplayIndex转换为奇偶列索引交替的布尔值 我在这里使用扩展WPF工具包中的转换器,但是编写自己的转换器应该很容易 <xcdg:IndexToOddConver
DataGrid
和ItemsSource
设置为DataTable
和AutoGenerateColumns=“True”
:
如何在其中创建备用列背景?我看到的每个解决方案都只适用于静态列
我不使用代码隐藏,所以首选XAML唯一的解决方案,但我对每个有价值的答案都很满意。您可以将
DataGridCell.Column.DisplayIndex
转换为奇偶列索引交替的布尔值
我在这里使用扩展WPF工具包中的转换器,但是编写自己的转换器应该很容易
<xcdg:IndexToOddConverter x:Key="oddConverter"/>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Column.DisplayIndex,RelativeSource={RelativeSource Self},Converter={StaticResource oddConverter}}" Value="True">
<Setter Property="Background" Value="{StaticResource AlternatingColumnBackgroundBrush}"/>
</DataTrigger>
</Style.Triggers>
</Style>
您可能希望使用透明背景,以便交替的行颜色和选择颜色仍然在单元格颜色中闪烁。您可以从
DataGridCell.Column.DisplayIndex
转换为在奇数和偶数列索引之间交替的布尔值
我在这里使用扩展WPF工具包中的转换器,但是编写自己的转换器应该很容易
<xcdg:IndexToOddConverter x:Key="oddConverter"/>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Column.DisplayIndex,RelativeSource={RelativeSource Self},Converter={StaticResource oddConverter}}" Value="True">
<Setter Property="Background" Value="{StaticResource AlternatingColumnBackgroundBrush}"/>
</DataTrigger>
</Style.Triggers>
</Style>
您可能希望使用透明背景,以便交替的行颜色和选择颜色仍然在单元格颜色中闪烁。创建您自己的转换器类:
public class OddConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Binding.DoNothing;
return (int)value % 2 != 0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
创建自己的转换器类:
public class OddConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Binding.DoNothing;
return (int)value % 2 != 0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
旁注:为什么设置DataContext
而不设置itemsource
?你是对的,我使用的是itemsource
事实上:)我从错误的地方复制了代码(我也有自己的控件从DataGrid
派生,我在那里使用DataContext
)。我编辑了这个问题。旁注:为什么设置DataContext
而不是itemsource
?你是对的,我使用的是itemsource
事实上:)我从错误的地方复制了代码(我也有自己的控件,它来自DataGrid
,我在那里使用DataContext
)。我编辑了这个问题。@bpiec我100%确定我有免费版本。。。但如前所述,它只是一个转换器,它接受一个索引并返回一个布尔值。。。如果你没有一个可供使用的预制构件,那么写你自己的就足够容易了。注意,它是http://schemas.xceed.com/wpf/xaml/datagrid
名称空间,而不是http://schemas.xceed.com/wpf/xaml/toolkit
1。我将此答案标记为已接受,因为这是第一个答案,而且确实有效。我制作了自己的IndexToOddConverter
,但可以使用@mm8提供的解决方案。谢谢大家!@bpiec我100%确定我有免费版本。。。但如前所述,它只是一个转换器,它接受一个索引并返回一个布尔值。。。如果你没有一个可供使用的预制构件,那么写你自己的就足够容易了。注意,它是http://schemas.xceed.com/wpf/xaml/datagrid
名称空间,而不是http://schemas.xceed.com/wpf/xaml/toolkit
1。我将此答案标记为已接受,因为这是第一个答案,而且确实有效。我制作了自己的IndexToOddConverter
,但可以使用@mm8提供的解决方案。非常感谢。
<DataGrid Name="dgrData" ItemsSource="{Binding MyDataTable}" AutoGeneratingColumn="dgrData_AutoGeneratingColumn" />
<DataGrid.Resources>
<Style x:Key="oddCellStyle" TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="Silver"/>
</Style>
</DataGrid.Resources>
</DataGrid>