WPF数据网格有时显示错误的颜色或字体
我有一个记录消息的WCF应用程序。这些消息显示在WPF数据网格有时显示错误的颜色或字体,wpf,datagrid,Wpf,Datagrid,我有一个记录消息的WCF应用程序。这些消息显示在数据网格中。每行包含四列时间、类型(即调试、错误、警告…)、命名空间(例如System.Threading)和消息本身 每一行都以基于类型的颜色显示。例如,红色表示错误。DataGrid中所有信息(行/列)的文本将以相同字体显示 在XAML中,您可以看到我在DataGrid.RowStyle中指定了字体设置和类型颜色“设置”是一个包含字体设置和颜色属性的类 我的问题是,不时会有一行以错误的颜色和/或字体显示。有人能解释一下发生了什么事吗 样式是指定
数据网格中。每行包含四列时间、类型(即调试、错误、警告…)、命名空间(例如System.Threading
)和消息本身
每一行都以基于类型的颜色显示。例如,红色表示错误。DataGrid
中所有信息(行/列)的文本将以相同字体显示
在XAML中,您可以看到我在DataGrid.RowStyle
中指定了字体设置和类型颜色“设置”是一个包含字体设置和颜色属性的类
我的问题是,不时会有一行以错误的颜色和/或字体显示。有人能解释一下发生了什么事吗
样式是指定字体设置和颜色的最佳方式吗?请注意,我希望这些设置是动态的,以便用户可以在运行时更改它们。欢迎对风格或实施提出任何建议
<DataGrid Name="MessagesGrid" ItemsSource="{Binding Messages}" AutoGenerateColumns="False" IsReadOnly="True">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Setters>
<EventSetter Event="Control.RequestBringIntoView" Handler="RequestBringIntoViewHandler"/>
<Setter Property="FontFamily" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Settings.MessageListFont.FontFamily}" />
<Setter Property="FontSize" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Settings.MessageListFont.Size}" />
<Setter Property="FontWeight" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Settings.MessageListFont.Weight}" />
</Style.Setters>
<Style.Triggers>
<!--colors for different types-->
<DataTrigger Binding="{Binding Type}" Value="Debug">
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Settings.DebugBrush}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="Error">
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Settings.ErrorBrush}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="Fatal">
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Settings.FatalBrush}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="Info">
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Settings.InfoBrush}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="Trace">
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Settings.TraceBrush}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="Warn">
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Settings.WarningBrush}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<!--using converter for some fields in case one or more are null.
if null, then display a string (MissingFieldString) indicating it was not in the message-->
<DataGridTextColumn Header="Time">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource ResourceKey=NullableTypeConverter}">
<Binding Path="Time" />
<Binding ElementName="MessagesGrid" Path="DataContext.MissingFieldString" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Type">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource ResourceKey=NullableTypeConverter}">
<Binding Path="Type" />
<Binding ElementName="MessagesGrid" Path="DataContext.MissingFieldString" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Namespace">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource ResourceKey=NullableTypeConverter}">
<Binding Path="Namespace" />
<Binding ElementName="MessagesGrid" Path="DataContext.MissingFieldString" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Message" Binding="{Binding Message}"/>
</DataGrid.Columns>
当您看到错误的颜色时,您是否动态更改了源属性的值,或者这是什么时候发生的?这是随机发生的。当颜色/字体改变时不会发生这种情况,我的用户很少使用该功能。显示大量信息并不罕见,可能一秒钟就显示几十条。