2013-06-04 1 views
6

多くのラベルを持つWPFアプリケーションがあります。それを行うにはどのような方法はXAMLで定義されたラベルをループする

for(int i = 1; i<40 ;i++) 
{ 
    label"i".content = i*10; 
} 

あります:私はもっとこのようにそれを行う必要

label1.content= 1; 
label2.content= 20; 
label3.content= 30; 
.... 

<Label x:Name="label1" /> 
<Label x:Name="label2" /> 
<Label x:Name="label3" /> 
.... 

は、私のような1ですべてのラベルに値1を与えたくありませんか?

+3

あなたはラベルの配列を作成することができ、その後、ループスルー? – Sam

+0

xamlで自分のラベルを作成しました。

+0

ラベルを作成するためのコードビハインドはオプションですか? – Sam

答えて

5

、あなたはこのようにそれを行うことができます。

var numberOfLabels = 40; 

for(int i = 1; i <= numberOfLabels; i++) 
{ 
    var labelName = string.Format("label{0}", i); 
    var label = (Label) this.FindName(labelName); 
    label.Content = i * 10; 
} 
1

Labelをフォームのコンストラクタ内のList<Label>に追加できます。

これは面倒な作業ですが、一度だけ行う必要があります。

List<Label> labels = new List<Label>(); 
labels.Add(label1); 
// etc. 

// loop 
for (int i = 0; i < labels.Count; i++) 
    labels[i].Text = i.ToString(); 

// alternative loop 
foreach (Label label in labels) 
    label.Text = "test"; 
3

バインディングを使用すると簡単です。 ViewModelのラベルコンテンツをObservableCollection<string>に保存するだけです。そして、あなたのケースの反復で、あなたが望むものを何でもできます。

編集1:

また、あなたのXAMLのようなものでなければなりません:あなたはタイプによってすべてのコントロールを列挙することができ、このコード

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject 
{ 
    if (depObj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
      if (child != null && child is T) 
      { 
       yield return (T)child; 
      } 

      foreach (T childOfChild in FindVisualChildren<T>(child)) 
      { 
       yield return childOfChild; 
      } 
     } 
    } 
} 

を使用して

 <ItemsControl ItemsSource="{Binding MyLabelValues}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <sdk:Label Content="{Binding Mode=TwoWay}"></sdk:Label> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
+0

同意します。それは行くべき道に違いない! –

2

foreach (Label lbl in FindVisualChildren<Label>(window)) 
{ 
    // do something with lbl here 
} 
1

これはいかがですか?

List<Label> labelL = new List<Label>(); 

for(int i = 1; i<40 ;i++) 
    labelL.Add(new Label{ Name = "label"+i, Content = i*10 }); 

最終結果はこれです。あなたのラベルはすべてが一貫命名されている場合

label1.Text = 10; 
label2.Text = 20; 
label3.Text = 20; 
... 
... 
関連する問題