1

私は C# に非常に慣れていないので、また迷子になりました。WPF フォームで TextBoxes を反復処理してデータをクリアしようとしています。
すべてのテキスト ボックスには、6 文字の長さの文字列の前に "TextBox" というプレフィックスが付いています。つまり、(TextBox3N1W09、TextBox3N1W10...)。私は VisualTreeHelper を使いたいと思っていますが、次のことができるほど賢くありません:
#1) 変数を渡します。親を理解していると思います。

XAML < グリッド名="ThisGrid" >

私の場合、Grid:"ThisGrid" という名前を付けましたが、TextBoxes を渡す方法がわかりません。TextBoxes の名前を反復処理して文字列として渡す必要があるかどうかはわかりません。グリッド内のすべての TextBoxes を VisualTreeHelper に表示させるだけです。
#2)これらのテキストボックス名またはテキストボックスオブジェクトが渡されると、結果をどうするかわかりません:

{
子を T として返します。
}

「T」が何なのか完全に見失いました。「T」はどうすればいいですか?メソッドで何かをする必要がありますか、それともメソッドを呼び出した場所で何かをする必要がありますか。最初に言ったように、テキストボックスをクリアしたいだけです。これはそれほど難しいことではないようですが、かなり苦労しています。

public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
{
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
    {
        var child = VisualTreeHelper.GetChild(parent, i);
        string controlName = child.GetValue(Control.NameProperty) as string;
        if (controlName == name)
        {
            return child as T;
        }
        else
        {
            T result = FindVisualChildByName<T>(child, name);
            if (result != null)
                return result;
        }
    }
    return null;
}
4

1 に答える 1

1

WPFフォームのTextBoxを繰り返し処理して、データをクリアしようとしています

それはそもそも間違ったアプローチです。WPFでは、ビジュアルツリーは複雑なものであり、それをナビゲートすることも複雑になる可能性があります。代わりに、考え方を変える必要があります。

  • WPFは、プレゼンテーション層からのアプリケーションロジックとデータの分離を促進するMVVMパターンを使用するのに最適です。このパターンを調査することをお勧めします。そうしないと、WPFで「一見単純な」こと(TextBoxのクリアなど)を何度も繰り返して壁にぶつかることになります。

  • UIをデータを保存する場所としてではなく、データを表示する方法として見ることを学ぶ必要があります。したがって、実際にクリアしたい文字列はUI要素のプロパティではなく、ModelまたはViewModelの一部です。WPFのMVVMとDataBindingについてお読みになることをお勧めします。

  • また、TextBoxesにTextBox3N1W09、TextBox3N1W10などの名前を付けたという事実から、データ項目のコレクション(MVVMの考え方が機能している)を表示する必要があると思われるので、またはのいずれかを使用してこれを行う方がよいでしょう。その派生物、および適切な。この概念もよく読んでおくことをお勧めします。ItemsControlDataTemplate

結論として、WPFは、ビジュアルツリーの複雑さや、ディスパッチャスレッドアフィニティなどの他のもののために、UI要素の操作をすぐに阻止します。一見複雑に見えるかもしれませんが、正しいパターンを適用することはすぐにわかります。あなたの人生をずっと簡素化するでしょう。

ここにあなたが読み始めることができるいくつかの記事があります:

http://en.wikipedia.org/wiki/Model_View_ViewModel

http://msdn.microsoft.com/en-us/library/ms750612.aspx

http://www.wpftutorial.net/

于 2013-01-19T04:06:54.723 に答える