0

コントロールの文字列名とそのタイプの文字列名がある WPF アプリケーションで、さまざまなコントロールのプロパティを設定できるようにしたいのですが、その方法がわかりません。これまでのところ、私はこれを持っています:

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

コントロール名のリストを繰り返し処理し、コントロールの文字列名だけでプロパティを設定できますが、オブジェクト型のハードコードされた明示的なキャストを実行しなくても実行できるようにしたいのです。

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

ありがとう。

4

2 に答える 2

2

タイプはあまり関係ありませんよね?必要なのはプロパティだけなので、次のようにすることができます。

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

dynamicまたは、ほぼ同じことを行う を使用することもできます。

dynamic dynObject = (dynamic)FindName("name");
dynObject.IsEnabled = false;
于 2011-12-13T17:26:15.370 に答える
1

WPF のVisualTreeをナビゲートして、名前で要素を検索し、プロパティを設定できます。

たとえば、ここにあるいくつかのヘルパー クラスを使用して、次のように言うことができます。

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

コントロールの型を知る必要はありません。プロパティを持つすべてのコントロールIsEnabledは に基づいているUIElementため、コントロールを としてキャストするだけで、そのプロパティUIElementを変更できIsEnabledます

于 2011-12-13T17:29:05.877 に答える