1. ホーム
  2. wpf

[解決済み] WPFユーザーコントロールでインポートリソースとローカルリソースを組み合わせる方法

2023-06-16 20:38:34

質問

私は、共有と個別のリソースの両方を必要とするいくつかの 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>

つまり、ローカルリソースはネストされる必要があります。 の中で でなければなりません。そのため、例の ここで は正しくありません。