共有リソースと個別リソースの両方を必要とするいくつかのWPFユーザーコントロールを作成しています。
別のリソースファイルからリソースをロードするための構文を見つけました。
<UserControl.Resources>
<ResourceDictionary Source="ViewResources.xaml" />
</UserControl.Resources>
ただし、これを行うと、次のようにリソースをローカルに追加することもできません。
<UserControl.Resources>
<ResourceDictionary Source="ViewResources.xaml" />
<!-- Doesn't work: -->
<ControlTemplate x:Key="validationTemplate">
...
</ControlTemplate>
<style x:key="textBoxWithError" TargetType="{x:Type TextBox}">
...
</style>
...
</UserControl.Resources>
ResourceDictionary.MergedDictionariesを見てきましたが、それは複数の外部辞書をマージすることのみを可能にし、ローカルでさらにリソースを定義することはできません。
些細なことを見逃しているに違いありませんか?
言及する必要があります:WinFormsプロジェクトでユーザーコントロールをホストしているため、App.xamlに共有リソースを配置することは実際にはオプションではありません。
私はそれを考え出した。ソリューションにはMergedDictionariesが含まれますが、詳細は次のように適切でなければなりません。
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ViewResources.xaml" />
</ResourceDictionary.MergedDictionaries>
<!-- This works: -->
<ControlTemplate x:Key="validationTemplate">
...
</ControlTemplate>
<style x:key="textBoxWithError" TargetType="{x:Type TextBox}">
...
</style>
...
</ResourceDictionary>
</UserControl.Resources>
つまり、ローカルリソースはResourceDictionaryタグ内でネストする必要があります。したがって、例 here は正しくありません。
MergedDictionariesセクション内でローカルリソースを定義できます。
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- import resources from external files -->
<ResourceDictionary Source="ViewResources.xaml" />
<ResourceDictionary>
<!-- put local resources here -->
<Style x:key="textBoxWithError" TargetType="{x:Type TextBox}">
...
</Style>
...
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
MergedDictionaries を使用します。
here。 から次の例を取得しました
File1
<ResourceDictionary
xmlns=" http://schemas.Microsoft.com/winfx/2006/xaml/presentation "
xmlns:x=" http://schemas.Microsoft.com/winfx/2006/xaml " >
<Style TargetType="{x:Type TextBlock}" x:Key="TextStyle">
<Setter Property="FontFamily" Value="Lucida Sans" />
<Setter Property="FontSize" Value="22" />
<Setter Property="Foreground" Value="#58290A" />
</Style>
</ResourceDictionary>
ファイル2
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="TextStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>