2011-12-13 10 views
0

コントロールの文字列名とその型の文字列名を持つWPFアプリケーションのさまざまなコントロールのプロパティを設定できるようにしたいのですが、それをするために。私はコントロールの文字列で名前を指定するだけでコントロール名と、設定されたプロパティのリストを繰り返し処理することができますWPFコントロールプロパティの動的設定

((TabItem)this.FindName("tabPatient")).IsEnabled = false; 

、しかし私が欲しいのは実行しなくても、それを行うことができるようにすることです。これまでのところ私はこれを持っていますオブジェクト型の明示的なハードコーディングされたキャスト

これを行う方法はありますか?

ありがとうございました。

答えて

1

はあなたが見つけるためにWPFのVisualTreeをナビゲートすることができますが、このような何かを行うことができますので、必要なのは、プロパティです要素を名前で設定し、プロパティを設定します。例えば

、いくつかのヘルパークラスを使用すると、あなたはあなたが本当にコントロールの種類を知っている必要はありません

foreach(var s in controlList) 
{ 
    var ctrl = VisualTreeHelpers.FindChild<UIElement>(this, s); 
    if (ctrl != null) 
     ctrl.IsEnabled = false; 
} 

言うことができhereを見つけました。 IsEnabledプロパティを持つすべてのコントロールがUIElementのオフに基づいているので、ちょうどそれがIsEnabled財産

+0

うわー、レイチェル、包括的な話。私はH.B.の答えが好きです。私が必要なことをするのはとても簡単な方法ですが、あなたは本当にあなたのアプローチでそれを公園から落としました。あなたは問題のミクロな側面を取り、マクロの意味を解決しました。あなたのアプローチは、私の直面している問題を解決するのに非常に役立ちます。私はWPFの深い理解のために考え続けています。どうもありがとうございました。 – MikeMalter

+0

@MikeMalter嬉しいことに気付きました:)私はしばしばWPFのビジュアルツリーで物事を見つけたいと思っていて、同じメソッドを自分のコードにコピー/ペーストするのに疲れてしまったので、それらをWPFライブラリ – Rachel

2

タイプは実際問題ではありません。

var obj = FindName("name"); 
obj.GetType().GetProperty("IsEnabled").SetValue(obj, false); 

はまた、あなたがdynamicを使用することができ、同じことを行います:

dynamic dynObject = (dynamic)FindName("name"); 
dynObject.IsEnabled = false; 
+0

HB、あなたの答えのおかげで、本当にクールな、私は何が起こっているか、もう少し理解を助けます修正するUIElementとしてコントロールをキャスト。それは良い答えであり、私が望む結果を得ました。彼女の答えがすぐに問題を解決するだけでなく、他のWPFナビゲーション問題を解決するためのフレームワークを提供したので、私は質問に対する答えとしてレイチェルの答えをマークしました。再度、感謝します。 – MikeMalter

+0

あなたが歓迎しています、うれしいです。 –

関連する問題