Creo que la razón principal son los objetos sellados. Si tiene una jerarquía de estilos:
Style A
/ \
Style A1 Style A2
esto podría no ser una situación difícil. Se refiere al StyleA
utilizando un recurso dinámico, por lo que cada vez que ese recurso cambie, Style A1
y Style A2
deberían cambiar su propiedad BasedOn
. Sin embargo, una vez que se usa un estilo en su aplicación, se convierte en un objeto sellado. Style A
se vuelve inmutable.
Una solución que puede utilizar es:
Style A
tiene que cambiar.
- Crea un nuevo objeto de estilo que será el nuevo recurso
Style A
.
- Crea una nueva versión de
Style A1
y Style A2
. Debería escribir un procedimiento de copia que realice copias de todos los Setters
, Resources
, etc. Establezca el BasedOn
en la nueva versión de Style A
.
- Actualice la colección de recursos para que los tres nuevos estilos estén allí.
{DynamicResource StyleA1}
y {DynamicResource StyleA2}
ahora debe recoger el hecho de que esos cambios recursos (del paso 4) y actualizar todas las referencias de forma automática.
Tenga en cuenta que este es un escenario muy simple. Las jerarquías de estilo de mundo real pueden ser más complejas, especialmente si están distribuidas en varios archivos y provienen de diccionarios fusionados.
Espero haber entendido su problema y haber ayudado.
Qué tal este escenario? Un equipo diferente (Ux) crea los estilos base ... un desarrollador desea establecer un par de propiedades además del estilo base.Idealmente, este es un escenario donde DevStyle BasedOn "DynamicResource UxStyle" habría ayudado ... Si esto no es posible, ¿cuáles son las alternativas para fusionar 2 estilos antes de aplicarlo a un control? – Gishu