次の方法で共有


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

なし。