質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

5095閲覧

WPFでデフォルトのデザインを指定するファイルの場所

lazex

総合スコア604

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/11/16 12:02

編集2016/11/16 13:49

WPF のアプリケーションを作成しています。
そこで用いる自作のユーザコントロールや既存コントロールを継承して拡張したものなど、汎用的なものはライブラリとして別プロジェクトにわけています。

その別プロジェクトの中で既存コントロールを継承したコントロールのデフォルトのデザインを設定したいです。
WPF アプリケーションのプロジェクト内にあるなら App.xaml のリソースに書けばよかったのですが、別プロジェクトは dll 出力するだけで WPF 用というわけではないからか、App.xaml にあたるものはありません。

WPFアプリケーションの方の App.xaml に書くこともできますが、それだと、このライブラリを使う全部のプロジェクトでこのコントロールに設定したいデフォルトのスタイルを毎回コピペする作業があるので良いやり方ではないと思います。

こういう場合どこにどういう風にデフォルトスタイルを書けばいいのでしょうか?

例えば、WPF アプリケーションではないプロジェクトに Label を継承した ExLabel クラスをこのように作り、デフォルトの文字色を #222 にするとしたらどのファイルにどういう記述をすればいいでしょうか?

<ExLabel.cs>

cs

1namespace lib 2{ 3 public ExLabel : Label 4 { 5 } 6}

追記

スタイルの指定は App.xaml のような XAML でできるものを期待しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasahikoHirata

2016/11/16 13:32

タイトルに矛盾しているように思えるのですが。’WPF アプリケーションではないプロジェクトに Label を継承した ExLabel クラスをこのように作り’
lazex

2016/11/16 13:39

本文にある通りです。プロジェクトはWPFでない方に作るという意味で、全体としてはWPFアプリケーションの作り方についての質問です。
MasahikoHirata

2016/11/16 13:43

であれば、私では間違っているかもしれませんが、’OverrideMetadata’かなぁと思い浮かぶのですが。ググっていただければ幸いです。
lazex

2016/11/16 13:47

回答ありがとうございます。ググってみたのですがcode behind用ということでしょうか?App.xamlのようなxamlを記述する方法があればよいのですけど
lazex

2016/11/16 14:01

こういうXAMLの書き方はわかるのですが、WPFでないdllを作るプロジェクトで作った場合にどのファイルにこれを書けばよいのか、というのが質問です。
ozwk

2016/11/16 23:21

GitHubとかで似たようなことやっているプロジェクト参考にすればどうでしょう。MahApps.Metroとか
guest

回答2

0

ベストアンサー

こんにちは。

カスタムコントロールで対応するのかスタイルのみを適用するのか、この2つは手法が異なります。
ふるまいが変わる場合はカスタムコントロール、デザインのみであればスタイルで良いでしょう。

カスタムコントロールの場合はスタイルが一緒に作られたと思うのでそのまま外部DLLのコントロールを利用すれば良かったはずです。

一方、スタイルの場合ですと、ResourceDictionaryを使いましょう。
そしてResourceDictionaryはマージ出来ますので、利用側アプリのApp.xamlなどでマージすれば良いのではないでしょうか。
外部コンポーネントをXAMLで指定する場合は少し癖がありますが、まずはその線で試してみてください。
不明点があればまた追記を。

マージされたリソース ディクショナリ - MSDN - Microsoft

投稿2016/11/17 08:29

編集2016/11/17 08:31
Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lazex

2016/11/17 14:48

今回のものは Label など既存コントロールを継承するのでカスタムコントロールを継承することはできないと思います。(dll用プロジェクトだと項目追加にカスタムコントロールはでないです) デフォルトスタイルさえ XAML 定義できればあとの振る舞い部分は c# コード側で操作するのでスタイルの方を取ることにします。 質問当初はWPFプロジェクトのApp.xamlのような用意された場所にかけばいいという視点でしたが、App.xamlにマージするという考えで調べてみるとアドバイスにある ResourceDictionary にマージする方法が一般的なんですね。 ライブラリを使うたびに App.xaml へのマージは手間ですがこの方法を使うことにします。 ありがとうございました。
guest

0

下記のように設定すればできると思います。

XAML

1<Window 2・・・省略 3 xmlns:custom="clr-namespace:lib" 4> 5・・・省略 6<custom:ExLabel /> 7・・・省略 8</Window> 9

XAML

1<Window 2・・・省略 3 xmlns:{任意の識別子}="clr-namespace:{namespaceを設定}" 4> 5・・・省略 6 <{任意の識別子}:{カスタムクラス名} /> 7・・・省略 8</Window>

投稿2016/11/17 08:11

himakuma

総合スコア952

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問