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

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

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

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

WPF

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

Q&A

3回答

1540閲覧

WPFでのユーザーコントロールの扱い方について

shingi0326

総合スコア7

C#

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

WPF

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

0グッド

0クリップ

投稿2018/06/07 13:50

WPFにあまり知識のない人間です。

C#のWPFでアプリケーションの作成をしています。
そのアプリケーションに新しくユーザーコントロールを追加しようとしていますが、
メインViewからユーザーコントロールへ値を渡す方法が調べてみてもなかなか分かりません。
依存プロパティやItemTemplateなど色々方法があるみたいですが、イマイチイメージが
できていない状態です。
下記に何をしたいユーザーコントロールなのか記載しますので、どなたか知恵を貸していただけないでしょうか。

<やりたいこと>
StackPanelで6分割したプレビューモニターを作成したいです。
メインViewから数字の0~5のいずれかを入力し、その数字に応じて
6分割したモニターに色を付けたいです。
方法として知りたいことは、メインViewで入力した値をプレビューモニターへ
値を渡して、プレビューモニターの画面表示を変えたいことです。
(プレビューモニターの作りは概ねできています。)

<イメージ図>
↓"0"を入力した時のプレビューモニター
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■

↓"4"を入力した時のプレビューモニター
■■■■■■■■
■■■■■■■■
□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□□□□□□

↓"4"を入力した時のプレビューモニター
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
□□□□□□□□
□□□□□□□□

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

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

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

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

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

mituha

2018/06/08 01:34

ユーザーコントロール以前の問題? 例えばTextBoxを使用してやりたいこと(現在試した状態等)の簡易的なソースを記載できますか?
guest

回答3

0

こんにちは。

MVVMにとらわれずにやるのであれば、ユーザコントロールに依存プロパティを実装するのが簡単と思います。
流れとしては、

  1. 依存プロパティの実装(仮に名前をSplitCountとします)
  2. SplitCount変更のイベントを実装(SplitCountChangedイベント)
  3. SplitCountChangedイベントをユーザコントロール内で購読
  4. SplitCountChangedのイベントハンドラにパネルに色付けする処理を実装
  5. 親のコントロールからSplitCountプロパティをコントロールにバインドする

これで親コントロールの分割数が変更されたタイミングで、ユーザコントロール内にイベントが発生するようになると思います。何か抜けてたらごめんなさい。

依存プロパティについては以下のQiitaの記事が大変役に立ちます。
Qiita WPF 依存プロパティの作り方

以上です、参考になれば幸いです。

投稿2018/06/08 12:22

g_uo

総合スコア212

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

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

0

こんにちは。
まさに同じような事を以前、悩んでました。

下記を参考にしていただければ、分かりやすいかと思います。

http://d.hatena.ne.jp/hilapon/20141113/1415855962

やっている事は、C#のクラスの使用と同様です。
違うのは、プロパティ変更通知の部分。ここで、それぞれ変更があった場合のみ、やりとりを行います。(Livetを使っていますが、ここは他の方法の実装もあります)

投稿2019/06/12 06:16

Base

総合スコア28

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

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

0

ちょっとイメージが湧かなくて申し訳ないですが、
メインViewにユーザーコントロールがある訳ですね。 とすると、ユーザーコントロールのオブジェクトはメインビューの管理下にあると思うのですが、違うでしょうか? そうならば、ユーザーコントロールにメインViewから呼び出すためのメソッドを用意し、そのメソッドを呼び出せば、良いのではないでしょうか?

外していたら、申し訳ありません。

投稿2018/06/07 14:18

pepperleaf

総合スコア6383

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

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

shingi0326

2018/06/07 14:25

拙い文章ですみません。 メインViewからユーザーコントロールを呼び出すメソッドを設けて、メインView側で何かしらトリガーを設けてユーザーコントロールを呼び出すメソッドを実行するってことでしょうか? それをしようとすると、メインViewとユーザーコントロールが密な関係になってしまうのではないかと思っています。 あとユーザーコントロールを呼び出すならどんな風に呼び出すのかソースコードのイメージが上手くできていません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問