次のシナリオを確認してください (他のシナリオも同様に適用される可能性があります) [ここのコードを適切なファイルにコピーして貼り付けるだけでプロジェクトを作成できます]:
a - 基本的なもの (Resources.xaml) で ResourceDictionary を作成します。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush Color="Red" x:Key="Test" />
<Style TargetType="{x:Type GroupBox}" x:Key="Test2" >
<Setter Property="Background" Value="Blue" />
</Style>
<Style TargetType="{x:Type TextBlock}" >
<Setter Property="Foreground" Value="Green" />
</Style>
</ResourceDictionary>
b - 他のユーザーが基本リソースを含むユーザー コントロール ベースを継承する (UserControlBase.cs) を作成します。
using System.Windows.Controls;
using System;
using System.Windows;
namespace ResourceTest
{
public class UserControlBase : UserControl
{
public UserControlBase()
{
this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("ResourceTest;component/Resources.xaml", UriKind.RelativeOrAbsolute) });
}
}
}
c - ベース (UserControl1.xaml) から継承する UserControl を作成します。
<ResourceTest:UserControlBase x:Class="ResourceTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ResourceTest="clr-namespace:ResourceTest"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="300" >
<Grid>
<GroupBox BorderBrush="{StaticResource Test}" Margin="3" Header="Test" Style="{DynamicResource Test2}" >
<TextBlock Text="TESTTEST" />
</GroupBox>
</Grid>
</ResourceTest:UserControlBase>
結果: StaticResources は解決されません (そして Test BorderBrush は読み込まれません)。DynamicResources は解決されます (背景は青色) が、デザイナーはとにかくリソースを見つけることができないと言います (最初は問題なく動作しますが、デザイナーを開いたり閉じたりすると、リソースを解決できません)。TextBlock スタイルのような名前のないリソースは正常に機能します。
これはデザイナーのバグですか、それとも何か間違っていますか? リソースが決して変更されないシナリオで、リソースを動的として宣言する必要がありますか?
前もって感謝します。