2016-02-17 2 views
1

Первый раз, когда WPF поступает из WinForm и довольно хорошо корректируется, но я в тупике участвовал в одной процедуре, которую я использовал довольно часто. Это был код, который я использовал в WinForm для автоматического управления элементами управления, которые были помечены таким образом; label1, label2, label3 и т. д.WPF - поиск инкрементных нумерованных элементов управления с использованием Visual Basic

Dim lbl As Label 
    Dim matcheslbl() As Control 

    For i As Integer = 1 To 24 

     matcheslbl = Me.Controls.Find("label" & i, True) 
     lbl = DirectCast(matcheslbl(0), Label) 

     If matcheslbl.Length > 0 AndAlso TypeOf matcheslbl(0) Is Label Then 

      lbl.Text = "Data Here" 

     End If 
    Next 

Как использовать ту же процедуру в WPF? Моя иерархическая схема в форме идет от WrapPanel> StackPanel> Canvas> Элементы управления

После изменения кода, который мне известно, я получаю зависание в аспекте Me.Controls и не могу найти что-либо после экстенсивно-поискового поиска, или я не полностью его понимаю , Это мой модифицированный код ...

 For i As Integer = 1 To 24 
     Dim lbl As Label 
     Dim matcheslbl() As Control 

     matcheslbl = Me.WrapPanel.FindName("lbl" & i) 
     lbl = DirectCast(matcheslbl(0), Label) 

     If matcheslbl.Length > 0 AndAlso TypeOf matcheslbl(0) Is Label Then 

      lbl.Content = "Data Here" 

     End If 
    Next 

Это вешает здесь ..

matcheslbl = Me.WrapPanel.FindName("lbl" & i) 

Любая помощь о том, как выполнить мою предыдущую процедуру в WPF и дать подробное описание о том, как добиться этого, так как Я очень новичок в WPF

+0

Это поможет, если вы продемонстрировали свой XAML, чтобы упростить объяснение иерархии. – Steve

+0

Я также хотел бы отметить, что Label - намного более сильный WPF-контроль, чем TextBlock, и если вы просто предоставляете основной текст в окне, вы должны использовать TextBlock. Я лично нашел нулевые значения для Label vs, используя более легкий TextBlock. –

ответ

1

Если вы посмотрите на intellisense на Me.WrapPanel.FindName, вы заметите, что он не возвращает массив, а всего лишь один объект. Я исправил код следующим образом:

For i As Integer = 1 To 24 
    Dim o As Object = wpMain.FindName("Label" + i.ToString()) 

    DirectCast(o, Label).Content = "Data Here" 
Next 
+0

Спасибо за это! Я проверю его позже и отчитаюсь. Также я не знал, что TextBlock - это объект, который я должен использовать вместо метки теперь, когда я перешел к WPF. Это отличная информация, так как я полностью чувствую себя из своего элемента с WPF по сравнению с WinForms, но мне нужен более надежный разработчик пользовательского интерфейса, поэтому он того стоит! –

+0

Просто быстро сообщите, что мы в бизнесе! Большое вам спасибо за помощь! Я очень ценю быстрый ответ и полезный совет по использованию TextBlocks! –

Смежные вопросы