Compartir a través de


El uso incorrecto de DynamicResource provoca un bloqueo de aplicación

Las aplicaciones que usan DynamicResource de manera incorrecta ahora se bloquean en tiempo de ejecución.

Versión introducida

.NET 10

Comportamiento anterior

Anteriormente, las aplicaciones que inicializaban DynamicResource incorrectamente continuarían ejecutándose sin fallar. Los valores se revertirían a los valores predeterminados y InvalidOperationException aparecería en la salida.

Nuevo comportamiento

Las aplicaciones ahora se bloquean con un error similar al siguiente:

System.Windows.Markup.XamlParseException: Set property 'System.Windows.ResourceDictionary.Source' threw an exception.

Esto ocurre cuando se usa un tipo de recurso incorrecto con DynamicResource. Por ejemplo, el fragmento de código siguiente provoca un bloqueo porque se usa SolidColorBrush en lugar de System.Windows.Media.Color.

<SolidColorBrush x:Key="RedColorBrush" Color="#FFFF0000" />
<SolidColorBrush x:Key="ResourceName" Color="{DynamicResource RedColorBrush}" />

Tipo de cambio disruptivo

Esto es un cambio de comportamiento y no compatible con el origen.

Motivo del cambio

Este cambio mejora el rendimiento del uso de DynamicResource. La optimización garantiza que la inicialización de recursos incorrecta se detecta inmediatamente, lo que impide el comportamiento no deseado.

Para evitar bloqueos, asegúrese de que se utilizan los tipos de recursos correctos con DynamicResource. Por ejemplo, el código siguiente resuelve el problema mediante System.Windows.Media.Color en lugar de SolidColorBrush:

<Color x:Key="RedColor">#FFFF0000</Color>
<SolidColorBrush x:Key="ResourceName" Color="{DynamicResource RedColor}" />

Las APIs afectadas

Ninguno.