WPF数据网格有时显示错误的颜色或字体

WPF数据网格有时显示错误的颜色或字体,wpf,datagrid,Wpf,Datagrid,我有一个记录消息的WCF应用程序。这些消息显示在数据网格中。每行包含四列时间、类型(即调试、错误、警告…)、命名空间(例如System.Threading)和消息本身 每一行都以基于类型的颜色显示。例如,红色表示错误。DataGrid中所有信息(行/列)的文本将以相同字体显示 在XAML中,您可以看到我在DataGrid.RowStyle中指定了字体设置和类型颜色“设置”是一个包含字体设置和颜色属性的类 我的问题是,不时会有一行以错误的颜色和/或字体显示。有人能解释一下发生了什么事吗 样式是指定

我有一个记录消息的WCF应用程序。这些消息显示在
数据网格中。每行包含四列时间、类型(即调试、错误、警告…)、命名空间(例如
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>


当您看到错误的颜色时,您是否动态更改了源属性的值,或者这是什么时候发生的?这是随机发生的。当颜色/字体改变时不会发生这种情况,我的用户很少使用该功能。显示大量信息并不罕见,可能一秒钟就显示几十条。