我正在使用数据网格并根据条件更改行的颜色,我正在以编程方式执行此操作。 根据例子 因为我的datagrid绑定到数据表,我直接从数据表
加载信息private void UpdateCor () {
gvDados.UpdateLayout ();
for (int i = 0; i <dt.Rows.Count; i ++)
{
var rowContext = (DataGridRow)
gvDados.ItemContainerGenerator.ContainerFromIndex (i);
if (rowContext! = null)
{
if (dt.Rows [i] ["situation"]. ToString (). Equals (1))
rowContext.Background = Brushes.Green;
else
rowContext.Background = Brushes.Red;
}
}
}
有了这个,我可以更新网格的颜色,即使它不是最好的方法。我的问题是这样,每当我使用滚动条向下或向上移动条形图时颜色就会过时。我该如何防止这种情况发生?即使我滚动酒吧颜色保持固定?
答案 0 :(得分:1)
这是与this question类似的问题。 可以使用datatrigger完成:
<DataGrid ItemsSource="{Binding YourItemsSource}">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding State}" Value="State1">
<Setter Property="Background" Value="Red"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding State}" Value="State2">
<Setter Property="Background" Value="Green"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
答案 1 :(得分:1)
通常,XAML过于简单,无法表达更复杂的条件。我更喜欢将值应该使用哪些颜色的逻辑放入转换器中。这样可以简化XAML,并为C#中的转换器提供更大的灵活性。
<datagrid.rowstyle>
<style targettype="DataGridRow">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self},
Path=Item.situation, Converter={StaticResource ValueToBackgroundConverter}}"/>
</style>
</datagrid.rowstyle>
在C#中:
class ValueToBackgroundConverter: IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (value is int) {
int quantity = (int)value;
if (quantity>=100) return Brushes.White;
if (quantity>=10) return Brushes.WhiteSmoke;
if (quantity>=0) return Brushes.LightGray;
return Brushes.White; //quantity should not be below 0
}
//value is not an integer. Do not throw an exception
// in the converter, but return something that is obviously wrong
return Brushes.Yellow;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
格式化WPF Datagrid的各个部分非常困难,Microsoft没有提供必要的信息。阅读我的文章Codeproject: Guide to WPF DataGrid formatting using binding,以便更好地了解如何轻松完成。