public class EventLogView : UserControl
{
private DataGrid dataGrid;
public EventLogView()
{
this.InitializeComponent();
dataGrid = this.FindControl<DataGrid>("EventLogsDataGrid");
this.dataGrid.LoadingRow += new EventHandler<DataGridRowEventArgs>(dataGrid_LoadingRows);
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
void dataGrid_LoadingRows(object sender, DataGridRowEventArgs e)
{
}
}
如果第4列的值“高”,我想将每一行颜色更改为红色。
发布于 2020-05-04 12:43:09
在“纯”WPF中这样做的方法是使用ItemContainerStyle
定义一个DataTrigger
。
<DataGrid x:Name="EventLogsDataGrid"
AutoGenerateColumns="False"
Items="{Binding LogsData}"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
IsReadOnly="True">
<DataGrid.ItemContainerStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Importance}" Value="HIGH">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.ItemContainerStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}"
Header="ID"
Width="Auto"/>
<DataGridTextColumn Binding="{Binding Content}"
Header="Content"
Width="Auto"/>
<DataGridTextColumn Binding="{Binding CreationDate}"
Header="Date Time"
Width="Auto"/>
<DataGridTextColumn Binding="{Binding Source}"
Header="Source"
Width="Auto"/>
<DataGridTextColumn Binding="{Binding Importance}"
Header="Priority"
Width="Auto"/>
</DataGrid.Columns>
</DataGrid>
但是,由于Avalonia不支持触发器,您可能必须处理类似于这样的LoadingRow
事件,以便以编程方式设置Background
属性:
void dataGrid_LoadingRows(object sender, DataGridRowEventArgs e)
{
var dataObject = e.Row.DataContext as YourDataObject;
if (dataObject != null && dataObject.Importance == "HIGH")
e.Row.Background = Brushes.Red;
}
https://stackoverflow.com/questions/61589139
复制相似问题