Myślę, że głównym powodem są zapieczętowane obiekty. Jeśli masz hierarchię stylów:
Style A
/ \
Style A1 Style A2
To nie może być trudny scenariusz. Odwołujesz się do StyleA
przy użyciu zasobu dynamicznego, więc gdy tylko zasób się zmieni, Style A1
i Style A2
powinny zmienić swoją właściwość BasedOn
. Jednak po zastosowaniu stylu w aplikacji staje się zapieczętowanym obiektem. Style A
staje się niezmienny.
Jeden obejście można użyć to:
Style A
musi się zmienić.
- Utwórz nowy obiekt stylu, który będzie nowym zasobem
Style A
. Stwórz nową wersję Style A1
i Style A2
. Musisz napisać procedurę kopiowania, która tworzy kopie wszystkich Setters
, Resources
itd. Ustaw BasedOn
na nową wersję Style A
.
- Zaktualizuj kolekcję zasobów, aby dostępne były trzy nowe style.
{DynamicResource StyleA1}
i {DynamicResource StyleA2}
powinien podnieść fakt, że zmiany te zasoby (z etapu 4) i aktualizować żadnych odniesień automatycznie.
Należy pamiętać, że jest to bardzo prosty scenariusz. Hierarchie w stylu prawdziwego świata mogą być bardziej złożone, zwłaszcza jeśli są rozmieszczone w wielu plikach i pochodzą ze scalonych słowników.
Mam nadzieję, że zrozumiałem Twój problem i pomogłem.
Co z tym scenariuszem - inny zespół (Ux) tworzy style bazowe ... Programista chce ustawić kilka właściwości oprócz podstawowego stylu.Idealnie jest to scenariusz, w którym DevStyle BasedOn "DynamicResource UxStyle" pomógłby. Jeśli nie jest to możliwe, jakie są alternatywy scalania 2 stylów przed zastosowaniem go do kontrolki? – Gishu