C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

WPF ResourceDictionaryの使用方法 /あかいぬ (17/11/06(Mon) 16:40) #85566
Re[1]: WPF ResourceDictionaryの使用方法 /ぶなっぷ (17/11/07(Tue) 13:27) #85576
  └ Re[2]: WPF ResourceDictionaryの使用方法 /あかいぬ (17/11/08(Wed) 11:17) #85586
    └ Re[3]: WPF ResourceDictionaryの使用方法 /ぶなっぷ (17/11/08(Wed) 13:22) #85588
      └ Re[4]: WPF ResourceDictionaryの使用方法 /あかいぬ (17/11/08(Wed) 14:46) #85589
        └ Re[5]: WPF ResourceDictionaryの使用方法 /ぶなっぷ (17/11/08(Wed) 15:08) #85590
          └ Re[6]: WPF ResourceDictionaryの使用方法 /ぶなっぷ (17/11/09(Thu) 09:58) #85593
            └ Re[7]: WPF ResourceDictionaryの使用方法 /あかいぬ (17/11/09(Thu) 11:01) #85594
              └ Re[8]: WPF ResourceDictionaryの使用方法 /Hongliang (17/11/09(Thu) 12:09) #85595
                ├ Re[9]: WPF ResourceDictionaryの使用方法 /ぶなっぷ (17/11/09(Thu) 14:14) #85596
                │└ Re[10]: WPF ResourceDictionaryの使用方法 /あかいぬ (17/11/09(Thu) 15:19) #85598 解決済み
                └ Re[9]: WPF ResourceDictionaryの使用方法 /あかいぬ (17/11/09(Thu) 15:18) #85597 解決済み


親記事 / ▼[ 85576 ]
■85566 / 親階層)  WPF ResourceDictionaryの使用方法
□投稿者/ あかいぬ (1回)-(2017/11/06(Mon) 16:40:14)

分類:[.NET 全般] 

環境:WPF VB.NET

新しくWPFで開発をはじめました
@まずは共通レイアウトのデザインを作成し、WindowsForomのように継承したいと思いましたがWPFは出来ず
 調べると「App.xaml」で「Style」として定義を行い、WPFの画面でStyle Sourceで指定を行うと共通デザインが表示されるところまで確認できました

AこれをDLL化して共通で使用できるようにしたいと思ったのですがうまくいきません
 手順
・作成したDLLを参照に追加する
・「ResourceDictionary」として「Style」の内容を定義してDLLを作成(key="DefaultWindowStyle"として作成)
・新しくソリューションを作成し、新規「ウィンドウ(WPF)」を追加
・<Window ・・・>の最後に、「Style="{Binding Source={StaticResource DefaultWindowStyle}}"」を追加
するとこの部分でエラーになります
 'Window' TargetType は、要素'WindowInstance'の型と一致しません。

リソースを共通化したらそのまま@と同じように使用できるかと思ったのですが違うのでしょうか?

[ □ Tree ] 返信 編集キー/

▲[ 85566 ] / ▼[ 85586 ]
■85576 / 1階層)  Re[1]: WPF ResourceDictionaryの使用方法
□投稿者/ ぶなっぷ (135回)-(2017/11/07(Tue) 13:27:27)
Style="{StaticResource DefaultWindowStyle}
にしたらどうですか?

[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85576 ] / ▼[ 85588 ]
■85586 / 2階層)  Re[2]: WPF ResourceDictionaryの使用方法
□投稿者/ あかいぬ (2回)-(2017/11/08(Wed) 11:17:14)
No85576 (ぶなっぷ さん) に返信
> Style="{StaticResource DefaultWindowStyle}
> にしたらどうですか?
>
回答ありがとうございます

> Style="{StaticResource DefaultWindowStyle}
にするとこの個所でエラーになります
エラー内容:リソース DefaultWindowStyle を解決できません

[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85586 ] / ▼[ 85589 ]
■85588 / 3階層)  Re[3]: WPF ResourceDictionaryの使用方法
□投稿者/ ぶなっぷ (136回)-(2017/11/08(Wed) 13:22:37)
ということは、リソースをマージできていませんね。

作成したDLLのファイル名が、Test1.dllで、
ResourceDictionary を定義している XAMLのファイル名が Test2.xaml
だとして、埋め込み先のxamlで Resourcesに以下のように定義して
みてください。
  <ResourceDictionary>
   <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/Test1;component/Test2.xaml" />
   </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>

たぶん、それでうまくいくと思うのですが。

[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85588 ] / ▼[ 85590 ]
■85589 / 4階層)  Re[4]: WPF ResourceDictionaryの使用方法
□投稿者/ あかいぬ (3回)-(2017/11/08(Wed) 14:46:46)
> <ResourceDictionary>
> <ResourceDictionary.MergedDictionaries>
> <ResourceDictionary Source="pack://application:,,,/Test1;component/Test2.xaml" />
> </ResourceDictionary.MergedDictionaries>
> </ResourceDictionary>
を追加しましたが最初のエラーに戻りました
[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85589 ] / ▼[ 85593 ]
■85590 / 5階層)  Re[5]: WPF ResourceDictionaryの使用方法
□投稿者/ ぶなっぷ (137回)-(2017/11/08(Wed) 15:08:21)
追加した上で、
  Style="{StaticResource DefaultWindowStyle}
にしても駄目ですか?
私のところでは、それでうまくいっています。

[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85590 ] / ▼[ 85594 ]
■85593 / 6階層)  Re[6]: WPF ResourceDictionaryの使用方法
□投稿者/ ぶなっぷ (138回)-(2017/11/09(Thu) 09:58:15)
この前の話の
> <ResourceDictionary Source="pack://application:,,,/Test1;component/Test2.xaml" />
Test1の部分は、dllのファイル名ではなく、名前空間(namespace)のようです。
私の環境の場合、一致していたので勘違いしていたようです。

参考)
https://daidev1976.wordpress.com/category/c/

[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85593 ] / ▼[ 85595 ]
■85594 / 7階層)  Re[7]: WPF ResourceDictionaryの使用方法
□投稿者/ あかいぬ (4回)-(2017/11/09(Thu) 11:01:08)
名前空間(namespace)の間違いは特にありませんでした
(DLLと同じに名前にしていました)

参照URL先でビルドアクションを「Resource」にしないと査証できない、とのことで変更しましたが
「ResourceDictionary Source=・・・」の個所でエラーになったので元の「Page」に戻しました

DLLで定義している「<Style x:Key="hoge" ・・」を変更してみましたが
参照自体失敗している場合は「名前を解決できません」となり、
名前を合わせると「 'Window' TargetType は、要素'WindowInstance'の型と一致しません。」
のエラーになります

気になるのは共通のスタイルをDLLに追加する場合に「リソースディクショナリ(WPF)」がありませんでした
なので別のWPFソリューションを作成し、「リソースディクショナリ(WPF)」を追加
そこに「<ResourceDictionary・・・」の記述を行い、そのファイルをDLLソリューションのフォルダにコピー
DLLのソリューションに追加を行い、強引(?)にコンパイルしています

そもそもが間違っているのでしょうか・・
[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85594 ] / ▼[ 85596 ] ▼[ 85597 ]
■85595 / 8階層)  Re[8]: WPF ResourceDictionaryの使用方法
□投稿者/ Hongliang (573回)-(2017/11/09(Thu) 12:09:17)
まず、新しいソリューションで手順を追ってみてはいかがでしょう。
Visual Studio Community 2017で以下のように

1. Visual Studioを立ち上げる

2. ファイル - 新規作成 - プロジェクトで、
 Windowsクラシックデスクトップ - WPFアプリ
 を、TestWpfAppの名前で作成する。

3. ソリューションエクスプローラのソリューションを右クリックし、
 追加 - 新しいプロジェクト で、
 Windowsクラシックデスクトップ - WPFユーザーコントロールライブラリ
 を、StyleLibraryの名前で作成する。

4. UserControl1.xamlを削除する。

5. ソリューションエクスプローラのStyleLibraryを右クリックし、
 追加 - リソースディクショナリ から、
 WindowBaseStyle.xamlという名前で追加する。

6. WindowBaseStyle.xamlを開き、ルート要素の下に以下のXAMLを追加する。
<Style TargetType="Window" x:Key="WindowBaseStyle">
  <Setter Property="Background" Value="Blue"/>
</Style>

7. ソリューションエクスプローラのTestWpfAppを右クリックし、
 追加 - 参照 から、
 プロジェクト - ソリューション - StyleLibrary
 にチェックを入れてOKする。

8. TestWpfAppのApplication.xamlを開き、<Application.Resources>の下に以下を追加する。
<ResourceDictionary>
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/StyleLibrary/component;WindowBaseStyle.xaml"/>
  <ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

9. MainWindow.xamlを開き、Windowの開始タグ内に以下を追加する。
Style="{StaticResource WindowBaseStyle}"

[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85595 ] / ▼[ 85598 ]
■85596 / 9階層)  Re[9]: WPF ResourceDictionaryの使用方法
□投稿者/ ぶなっぷ (139回)-(2017/11/09(Thu) 14:14:47)
実際のコードが見えないんで、はっきりしたことが分からないんですが、
良いサンプルコードを発見したので連絡しておきます。
ここのHPにビルド可能なプロジェクトが転がっています。
  http://pro.art55.jp/?eid=1176521

[Source and Project]と書いてあるリンクからダウンロードしてください。
実際に動作するので、あかいぬさんのプロジェクトと見比べれば
何か分かるかもしれません。

[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85596 ] / 返信無し
■85598 / 10階層)  Re[10]: WPF ResourceDictionaryの使用方法
□投稿者/ あかいぬ (6回)-(2017/11/09(Thu) 15:19:03)
ご教授ありがとうございます

参考にさせていただきます
解決済み
[ 親 85566 / □ Tree ] 返信 編集キー/

▲[ 85595 ] / 返信無し
■85597 / 9階層)  Re[9]: WPF ResourceDictionaryの使用方法
□投稿者/ あかいぬ (5回)-(2017/11/09(Thu) 15:18:25)
丁寧な説明ありがとうございます

なんとかうまくできました
DLLのプロジェクトを通常のDLLで作成していたのがだめだったと思われます

ありがとうございました
解決済み
[ 親 85566 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -