DynamicResource 的用法不正确会导致应用程序崩溃

使用 DynamicResource 错误的应用程序现在在运行时崩溃。

已引入的版本

.NET 10

以前的行为

以前,未正确初始化 DynamicResource 的应用程序将继续运行,而不会崩溃。 这些值将回退到默认值,并且输出中会显示一个 InvalidOperationException 值。

新行为

应用程序现在崩溃,出现如下错误:

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

当使用 DynamicResource不正确的资源类型时,会出现这种情况。 例如,下面的代码片段会导致崩溃,因为使用了一个 SolidColorBrush 代码片段,而不是 System.Windows.Media.Color

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

破坏性变更的类型

这既是 源代码不兼容 ,也是 行为变化

更改原因

此更改可提升 DynamicResource 的性能。 优化可确保立即捕获不正确的资源初始化,从而防止意外行为。

为了避免崩溃,请确保正确使用DynamicResource资源类型。 例如,以下代码通过使用 System.Windows.Media.Color 而不是 SolidColorBrush 来解决问题。

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

受影响的 API

没有。