複数のプロジェクトで利用できそうなユーザーコントロールはDLLにして共有するのが良さそうです。
WPFのユーザーコントロールやウィンドウはもちろん、リソースディクショナリもDLLで作成し、それを参照して利用する事が出来ます。
WPFのユーザーコントロールを含むDLLのプロジェクトを作成する方法については
「C#のWPFで共有できそうなウインドウをDLL化する」を参照してください。
DLL内のウィンドウやユーザーコントロールを利用する方法については
「C#のWPFでDLL内のユーザーコントロールを利用する」を参照してください。
ここではDLLの中にあるリソースディクショナリを利用する方法について解説します。
プロジェクトの参照にDLLを追加
先ずはプロジェクトの参照にDLLを追加しましょう。
メニューから「プロジェクト(P)」→「参照の追加(R)...」をクリックします。
DLLのプロジェクトにチェックを入れて「OK」ボタンをクリックしましょう。
それ以外の場合は「参照(B)...」ボタンからDLLファイルを指定します。
リソースディクショナリをマージする
以下のサンプルで解説します。
<Window x:Class="WpfTest1.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTest1"
mc:Ignorable="d"
Title="TestWindow" Height="300" Width="300">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/TestLibrary;component/Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button Style="{StaticResource TestButtonStyle}" />
</Grid>
</Window>
リソースディクショナリをマージ
12行目が追加したリソースディクショナリです。
<ResourceDictionary.MargedDictionaries>でリソースディクショナリをマージしていきます。
DLL内にあるリソースディクショナリを利用する為にはDLLファイル名を指定する必要があります。
「pack://application:,,,/[DLLファイル名];component/」という記述がそれです。
この記述に続けてリソースディクショナリのXAMLファイル名を指定ます。
この例では「TestLibrary.dll」の中の「Dictionary1.xaml」というリソースディクショナリを利用できるようにしています。
StaticResourceで参照
リソースディクショナリ内の要素を参照する方法はDLL内の場合でも同じです。
StaticResourceでキーを指定して利用します。
上記の例では、「Dictionary1.xaml」の中に「<Style x:Key="TestButtonStyle" ・・・」のようにボタン用のスタイルが定義されています。
17行目では x:Key の値を使ってその定義を参照しています。


コメント
コメントを投稿