2013-05-12 3 views
0

Итак, у меня есть пара элементов, которые я хочу использовать в моем классе C#. Вот несколько строк из моего XAML документа, который я хочу, чтобы извлечь элементы из:Получение элемента из файла xaml без использования свойства x: Name

<TextBlock x:Name="diastolic17" FontSize="10" Foreground="Ivory" Grid.Row="19" 
      Grid.Column="4" 
      TextAlignment="Center">0</TextBlock> 
    <TextBlock x:Name="diastolic18" FontSize="10" Foreground="Ivory" Grid.Row="20" 
      Grid.Column="4" 
      TextAlignment="Center">98</TextBlock> 
    <TextBlock x:Name="diastolic19" FontSize="10" Foreground="Ivory" Grid.Row="21" 
      Grid.Column="4" 
      TextAlignment="Center">88</TextBlock> 

Они все в том же пространстве имен. Я использовал просто свойство x: Name, чтобы получить TextBlocks, но проблема в том, что у меня теперь есть огромный список TextBlocks, и я сомневаюсь, что единственный способ это сделать - напечатать каждое имя Textblock. Если кто-нибудь сможет прояснить, как они справятся с этим? Будут предложены простые решения, я начинающий программист, и это для школьного проекта.

+0

Что вы подразумеваете под «извлечением»? –

+0

В целом при использовании WPF и MVVM: если вам нужно имя элемента управления в коде или нужно обратиться к элементу управления в коде, вам может потребоваться перепроектировать зависимости. –

+0

Я просто имею в виду «получить элемент» на самом деле –

ответ

0

Если вам необходимо обратиться к множеству элементов управления, которые можно сгруппировать их в единый орган управления (stackpanel, grid, ...) и получить доступ к элементам управления путем перечисления дочерних элементов управления контейнера.

Альтернатива use data binding. Таким образом, вам, вероятно, вообще не нужно обращаться к элементам управления.

+0

ah offcourse да, не думал об этом, приветствует –

1

Способ использования FindVisualChildren. Он проходит через визуальное дерево и находит требуемый контроль.

Это должно сделать трюк

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

тогда вы перечислить по сравнению с контролем, как так

foreach (TextBlock tb in FindVisualChildren<TextBlock>(window)) 
{ 
    // do something with tb here 
} 
+0

Спасибо, но где же «окно» происходит из цикла foreach? –

+0

Это из класса Window? –

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