15

私は、C#でプログラム的に構築されたコントロールを参照するための最良の方法を見つけるためにいくつかの助けを求めています

XAMLにラベルを事前に含めて名前を付けるとmarketInfo、コードで次のTagようなプロパティを設定できます。

marketInfo.Tag = timeNow;

ただし、私はコントロールを構築し、次のようなものを使用してそれぞれに名前を割り当てています

System.Windows.Controls.Label lbl = new System.Windows.Controls.Label();
lbl.Content = market.name + " - " + DateTime.Now.ToLocalTime().ToLongTimeString();
lbl.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Left;
lbl.Height = 40;
lbl.Name = @"_" + "marketInfo" + countMarket;

これらのコントロールを別の方法から参照するにはどうすればよいですか?使用を提案するいくつかの投稿を読みましたvisualtreehelperが、これには特定のコントロールを見つけるためにループコントロールが必要なようです。ループを回避するために名前でコントロールにアクセスする方法はありますか?

例:

//pseudo code
SomeControl("_marketInfo5").Tag = timeNow;

ありがとうございました

4

2 に答える 2

34

これを行うには、少なくとも2つの方法があります。

  • 親コンテナのメソッドを使用しFindNameてコントロールを見つけます(ただし、visualtreehelperのように内部的にループが発生します)

  • 作成する各コントロールの参照を格納する辞書を作成します

    var controls = new Dictionary<string, FrameworkElement>();
    controls.Add("_marketInfo5", lbl);
    

    次に、次のことができます。

    controls["_marketInfo5"].Tag = timeNow;
    
于 2012-09-02T18:39:53.660 に答える
0

XamlQueryを使用して、実行時にコントロールを見つけることができます。CodePlexのXamlQuery

XamlQuery.Search(RegisterGrid, "Label[Name=_marketInfo5]").SetValue(Control.TagProperty, timeNow);
于 2015-08-10T13:00:37.320 に答える