2013-06-04 8 views
6

मेरे पास कई लेबल के साथ एक WPF एप्लिकेशन है।एक्सएएमएल परिभाषित लेबल पर लूपिंग

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

मैं न की तरह एक एक करके हर लेबल एक मूल्य के एक देना चाहते हैं:

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

वहाँ ऐसा करने के लिए कोई तरीका है:

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

मैं और अधिक इस तरह यह करना चाहते हैं?

+3

आप लेबल की एक सरणी बना सकते हैं, तो पाश के माध्यम से? – Sam

+0

मैंने अपने लेबल xaml में बनाया है जैसे: <लेबल x: नाम = "लेबल 1" /><लेबल x: नाम = "लेबल 2" /> – user2261524

+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

यदि आप बाध्यकारी के साथ काम करते हैं तो यह आसान है। आपको अपने लेबल सामग्री को अपने व्यूमोडेल पर ObservableCollection<string> में रखना होगा। और फिर, आप अपने मामले में पुनरावृत्ति के साथ जो भी चाहें कर सकते हैं।

संपादित करें 1: इस कोड

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

:

इसके अलावा अपने XAML की तरह कुछ किया जाना चाहिए।

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; 
... 
...