РЕДАКТИРОВАТЬ : мне удалось воспроизвести это в очень урезанной версии приложения. Вот ссылка на ZIP-файл
http://www.mediafire.com/?cn918gi15uph1xe
У меня есть модуль, добавляющий представление к двум различным областям - область строки состояния вдоль вершины - то, где проблема возникает. Странная часть: когда к основному региону добавляется тот же тип представления, проблем не возникает. Область строки состояния - это ItemsControl, а основной регион - ContentPresenter. Это единственная разница.
Пожалуйста, дайте мне знать, если у вас есть понимание! Благодаря.
----- Исходное сообщение -----
Привет всем,
Я вижу странное поведение с WPF. Я использую .NET 4 и PRISM v4. Наша структура структурирована так, что словари ресурсов скинов существуют в своей сборке. Модули не ссылаются на эту сборку - вместо этого у нас есть класс менеджера скинов, который читает из файла конфигурации, какой скин нам нужен, и загружает соответствующие компоненты в объединенный словарь. Объединенный словарь устанавливается в ресурсах приложения (перед его добавлением мы очищаем Application.Resources.MergedDictionaries). Идея состоит в том, что мы можем позже переключать скины во время выполнения, если это необходимо, и модулям не нужно знать о скинах до времени выполнения.
Затем в нашем xaml мы ссылаемся на стили, используя DynamicResource. Проблема связана со стилем TextBlock, который определен в скине и на который ссылается ключ, например
<TextBlock Style="{DynamicResource someKey}" ... />
Стиль определяет семейство шрифтов, размер шрифта и передний план. Семейство и размер шрифта применяются правильно (я проверял это). Передний план, однако, всегда черный. Я использовал Snoop и WPF Inspector, чтобы убедиться, что значение переднего плана «унаследовано», а не из стиля.
У меня также есть элемент управления, который наследуется от TextBlock, и все, что он делает, - это добавляет некоторые свойства, которые определяют, каким должно быть текстовое значение (это никак не влияет на стиль). Я смог добавить переопределенное свойство для свойства Foreground и обнаружил, что применяется значение переднего плана стиля, а затем применяется унаследованное значение. Я не смог заставить работать отладку исходного кода .NET, поэтому я не мог понять, почему / откуда он вызывался во второй раз ...
Вот ссылка на старый, старый пост от парня с точно такой же проблемой - он не нашел ответа, а вместо этого - обходной путь. К сожалению, обходной путь работает только на унаследованном элементе управления (я не могу установить InheritanceBehavior для TextBlocks).
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/3501ed19-ab40-4064-81b5-e9b7b9d35b56