WPF DataGrid AlternatingRowBackground和RowStyle优先级

时间:2012-12-17 12:41:31

标签: wpf wpfdatagrid

如何在RowStyle之后让AlternatingRowBackground申请?我想要IsOrangetrue的{​​{1}}背景Orange无论交替的行背景如何,我都想要这些项目。目前情况并非如此。

XAML:

<DataGrid Name="g"
    AlternatingRowBackground="Blue" 
    AlternationCount="2" 
    ...
    SelectionMode="Single">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsOrange}" Value="Y">
                    <Setter Property="Background" Value="Orange" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
    ...
</DataGrid>

2 个答案:

答案 0 :(得分:16)

这不是一个错误。在Style中,您无法覆盖交替行的本地值集。这就是为什么这不起作用

<DataGrid AlternatingRowBackground="Blue"

但如果您在AlternatingRowBackground中设置Style,则可以

<DataGrid.Style>
    <Style TargetType="DataGrid">
        <Setter Property="AlternatingRowBackground" Value="Blue"/>
    </Style>
</DataGrid.Style>

感谢this answer

答案 1 :(得分:2)

在我的程序中,除主窗口外,我还有两个类,只包含一个DataGird。让我们从头等舱开始:

MyClass.cs:

public class MyClass
{
    public bool IsOrange { get; set; }

    public string Name { get; set; }
}

我只有两个属性,IsOrange指定行是否应为橙色。 ((不要关心其他财产。))

现在视图模型类只包含MyClass的集合。

MyClassViewModel.cs:

public class MyClassViewModel
{
    public ObservableCollection<MyClass> con { get; set; }

    public MyClassViewModel()
    {
        con = new ObservableCollection<MyClass>();

        con.Add(new MyClass { IsOrange = true, Name = "Aa" });
        con.Add(new MyClass { IsOrange = true, Name = "Bb" });
        con.Add(new MyClass { IsOrange = false, Name = "Cc" });
        con.Add(new MyClass { IsOrange = false, Name = "Dd" });
        con.Add(new MyClass { IsOrange = false, Name = "Ee" });
        con.Add(new MyClass { IsOrange = true, Name = "Ff" });
        con.Add(new MyClass { IsOrange = true, Name = "Gg" });
        con.Add(new MyClass { IsOrange = false, Name = "Hh" });
    }
}

在MainWindow.xaml:

<Grid>
    <DataGrid Margin="10" ItemsSource="{Binding Path=con}" >
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=IsOrange}" Value="true">
                        <Setter Property="Background" Value="Orange" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>
</Grid>

最后在MainWindow.xaml.cs中:

public partial class MainWindow : Window
{
    MyClassViewModel VM = new MyClassViewModel();

    public MainWindow()
    {
        InitializeComponent();

        DataContext = VM;
    }
}

这就是结果:

enter image description here

您可以将您的电子邮件发送给我,然后向您发送该应用。

祝你好运:)