WPF-一种颜色的奇怪行为绑定问题

时间:2019-04-05 20:17:55

标签: c# wpf

我有一个Window,其中包含与导航相关的用户控件,该控件的布局在很大程度上受数据绑定驱动。数据上下文是一个“状态”对象,具有一个“ StatusStyle”子对象,该子对象包含所有格式,例如前景,背景,字体大小等。

当此控件的数据上下文的状态设置为“不完整”状态时,它将获得一个新的StatusStyle对象,该对象定义一个白色背景(默认为绿色)和一个非常深的灰色前景(#333333)。

所有测试都完美完成,我们有几位测试人员,他们没有任何问题。然后,我们将此代码分发给了生产中的一小部分人,突然之间,这些人突然看到此控件具有白色背景和白色前景

Screenshot

我-知道绑定正在工作,因为如果不这样做,控件将不会得到白色背景。所有其他样式参数也都可以使用(字体大小等)。

更奇怪的是,受影响的唯一东西似乎是这种深灰色。发生此问题时,应用程序中使用该相同颜色的所有其他位置(例如TextBlocks等)都以白色文本结尾。

整个配色方案都以完全相同的方式在同一位置定义:

namespace Styling.Colors
{
  public static class Fonts
  {
    public static Color DarkBlue { get; set; } = (Color)ColorConverter.ConvertFromString("#003366");
    public static Color DarkGray { get; set; } = (Color)ColorConverter.ConvertFromString("#333333");
    ...etc...
  }

  public static class FontBrushes
  {
    public static SolidColorBrush DarkBlue { get; set; } = new SolidColorBrush(Fonts.DarkBlue);
    public static SolidColorBrush DarkGray { get; set; } = new SolidColorBrush(Fonts.DarkGray);
    ...etc...
  }
}

下面是在XAML中使用它的一个示例:

<Style TargetType="{x:Type DataGridRow}">
  <Setter Property="Foreground" Value="{Binding Source={x:Static colors:FontBrushes.DarkGray}}" />
</Style>

...以及代码隐藏中的用法:

public override SolidColorBrush ForegroundColor { get; set; } = Styling.Colors.FontBrushes.DarkGray;

同样,在所有引用这种特定颜色的地方,对于生产中的某些用户来说,它会随机呈现白色,而我无法复制它(并且在生产前测试中从未出现过)。当我测试时,它看起来总是正确的。相同配色方案中的所有其他颜色看起来正确。

在这一点上,我能想到的是这是某种资源问题,例如内存或图形问题,但是我只是在这里挠头。这是一个静态笔刷,因此我认为它只会被分配一次,并且会继续被引用。没有设置或修改颜色的代码-仅能读取画笔。

有什么想法吗?

编辑:好的,我在这里有一个小突破。看来,有一个单独的第三方插件也正在同一应用程序中运行,并且在启动时,它具有某种主题管理器,可将新的资源字典添加到合并的字典中:

System.Windows.Application.Current.Resources.MergedDictionaries.Add(((ResourceDictionary)new StyleResources());

...其中存在一些规则,这些规则几乎可以肯定是导致更改画笔颜色的原因。但是,我无权访问此主题管理器/样式字典的代码,因此有一种好的方法,可以通过编程方式转储整个资源字典,以便可以由其中一位用户保存然后将其发送给我进行检查?

0 个答案:

没有答案