Приоритет WPF DataGrid AlternatingRowBackground и rowstyle
как мне сделать мой RowStyle
для применения после AlternatingRowBackground
? Я хочу предметы, имеющие IsOrange
as true
иметь 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 ответов
Это не ошибка. В Style
вы не можете переопределить локальный набор значений для чередующейся строки. Вот почему это не сработает
<DataGrid AlternatingRowBackground="Blue"
но если поставить AlternatingRowBackground
на Style
вы можете
<DataGrid.Style>
<Style TargetType="DataGrid">
<Setter Property="AlternatingRowBackground" Value="Blue"/>
</Style>
</DataGrid.Style>
спасибо ответ.
в моей программе у меня есть два класса в дополнение к главному окну, которое содержит только один 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" });
}
}
In Файл 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;
}
}
и вот результат:
вы можете отправить мне вашу электронную почту, чтобы отправить вам приложение.
Удачи :)