У меня есть окно, которое содержит пользовательский элемент управления, связанный с навигацией, который имеет макет, который в значительной степени определяется привязкой данных. Контекст данных является объектом «Status», который имеет подобъект «StatusStyle», который содержит все форматирование, например, передний план, фон, размер шрифта и т. Д. *
Когда состояние контекста данных этого элемента управления установлено как «неполное», он получает новый объект StatusStyle, который определяет белый фон (по умолчанию зеленый) и очень темно-серый передний план (# 333333).
Все прошло отлично, и у нас было несколько тестеров, у которых не было никаких проблем. Затем мы передали этот код небольшой группе людей, работающих в производстве, и внезапно эти люди случайно увидели, как этот элемент управления получил белый фон и белый передний план .
![Screenshot](https://i.stack.imgur.com/juSq4.png)
Я знаю, что привязка работает, потому что элемент управления не получил бы белый фон, если бы не сделал. Все остальные параметры стиля также работают (размер шрифта и т. Д.).
Что еще более странно, так это то, что ЕДИНСТВЕННОЙ вещью, по-видимому, является этот темно-серый цвет. Любое другое место в приложении, которое использует тот же цвет (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 ());
... и там есть некоторые правила, которые почти наверняка отвечают за изменение цвета кисти. Тем не менее, у меня нет доступа к коду для этого менеджера тем / словаря стилей, так что есть хороший способ просто программно выгрузить весь словарь ресурсов, чтобы он мог быть сохранен одним из пользователей и затем отправлен мне для осмотра?