Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态列的备用列背景_C#_Wpf_Xaml_Datagrid - Fatal编程技术网

C# 动态列的备用列背景

C# 动态列的备用列背景,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,A将DataGrid和ItemsSource设置为DataTable和AutoGenerateColumns=“True”: 如何在其中创建备用列背景?我看到的每个解决方案都只适用于静态列 我不使用代码隐藏,所以首选XAML唯一的解决方案,但我对每个有价值的答案都很满意。您可以将DataGridCell.Column.DisplayIndex转换为奇偶列索引交替的布尔值 我在这里使用扩展WPF工具包中的转换器,但是编写自己的转换器应该很容易 <xcdg:IndexToOddConver

A将
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>