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

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

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

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

WPF

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

Q&A

解決済

2回答

6937閲覧

dllの呼び出し元のクラスのプロパティを参照したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

WPF

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

0グッド

0クリップ

投稿2016/11/14 04:39

###やりたいこと
以下のコードのwin.Resource = ((Window)/*呼び出し元のクラス*/).Resourceを実現させる方法が分かりません。
引数でもできると思うのですが、できるだけHost側を簡潔にさせたいです。何かいい方法ありませんでしょうか?

###コード

C#

1//省略 2namespace Hoge 3{ 4 public class ChildDialog 5 { 6 public static Show() 7 { 8 var win = new MainWindow(); 9 win.Resource =((Window)/*呼び出し元のクラス*/).Resource //★★★★★★★★★★★ 10 win.ShowDialog(); 11 } 12 } 13}

これをdll化してHostに参照。

C#

1using Hoge; 2 3//省略 4 5namespace Host 6{ 7 public partial class MainWindow: Window 8 { 9 private void button_Click(object sender, RoutedEventArgs e)//適当なボタンイベント 10 { 11 ChildDialog.Show();//Hogeのやつ 12 } 13 } 14} 15

ご教授のほど、よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

インスタンスの値を使いたいのであれば、インスタンスを渡すしかないです。
名前情報だけでよければCallerMember系が使えますけど。
苦しいですけど、せいぜい拡張メソッドに落とすとかを検討する程度しか出来ない気がします。

C#

1public partial class MainWindow : Window 2{ 3 public MainWindow() 4 { 5 InitializeComponent(); 6 } 7 8 private void Button_Click(object sender, RoutedEventArgs e) 9 { 10 //ChildDialog.Show();//Hogeのやつ 11 this.ShowChildDialog(); 12 } 13}

C#

1namespace Hoge 2{ 3 public static class WindowExtensions 4 { 5 public static bool? ShowChildDialog(this Window caller) 6 { 7 var childDialog = new MainWindow(); 8 childDialog.Resources = caller.Resources; 9 return childDialog.ShowDialog(); 10 } 11 } 12}

投稿2016/11/14 06:27

Tak1wa

総合スコア4791

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

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

退会済みユーザー

退会済みユーザー

2016/11/14 06:45

こんにちは。回答ありがとうございます。 中々思った通りに実装するのは難しそうですね。頂いた回答を含めて、他の方法を試してみたいと思います。
guest

0

一応、Diagnostics.StackTraceを使えば実現できると思いますが、もしかしたらシンボルファイル無いと動かないかもしれません。(ビルドに含まれている.pdbと付いているファイル)
参考URL

こっちの方が良さげ?でも結局シンボルファイルは必要そうな気がしますね。
CompilerServices

追記:
引数を利用する事になってしまいますが、比較的汎用的な方法
(DLL越しだとちょっと自信ありませんが、多分意図した結果が取れると思います)

C#

1public static Show(object caller) 2{ 3 var className = caller.GetType().FullName; 4} 5 6namespace Host 7{ 8 public partial class MainWindow: Window 9 { 10 private void button_Click(object sender, RoutedEventArgs e)//適当なボタンイベント 11 { 12 ChildDialog.Show(this);//自分を渡す 13 } 14 } 15}

投稿2016/11/14 04:52

編集2016/11/14 05:11
ishi9

総合スコア1294

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問