Я думаю, что главная причина - запечатанные объекты. Если у вас есть иерархия стилей:
Style A
/ \
Style A1 Style A2
это не может быть сложным сценарием. Вы ссылаетесь на StyleA
, используя динамический ресурс, поэтому всякий раз, когда этот ресурс изменяется, Style A1
и Style A2
должны менять свое свойство BasedOn
. Однако, как только стиль используется в вашем приложении, он становится запечатанным объектом. Style A
становится неизменным.
Один из возможных способов решения проблемы:
Style A
необходимо изменить.
- Создайте новый объект Style, который будет новым
Style A
ресурсом.
- Создайте новую версию
Style A1
и Style A2
. Вам нужно написать процедуру копирования, которая делает копии всех Setters
, Resources
и т. Д. Установите для BasedOn
новую версию Style A
.
- Обновите коллекцию ресурсов так, чтобы там были три новых стиля.
{DynamicResource StyleA1}
и {DynamicResource StyleA2}
теперь должны учитывать тот факт, что эти ресурсы изменяются (с шага 4), и автоматически обновлять любые ссылки.
Обратите внимание, что это очень простой сценарий. Иерархии в стиле реального мира могут быть более сложными, особенно если они распределены по нескольким файлам и получены из объединенных словарей.
Надеюсь, я понял вашу проблему и помог.