Список элементов пользовательского элемента управления или сетки - PullRequest
2 голосов
/ 04 января 2011

Здравствуйте, у меня есть пользовательский элемент управления, и мне нужны все текстовые поля, кнопки и т. Д. Из этого пользовательского элемента управления. Это есть способ, которым у меня есть все эти элементы? Спасибо

Ответы [ 2 ]

4 голосов
/ 04 января 2011

вы можете использовать VisualTreeHelper для достижения этой цели.

Здесь есть статья здесь , которая предлагает следующий метод расширения:

public static IEnumerable<DependencyObject> GetVisuals(this DependencyObject root)
{
    int count = VisualTreeHelper.GetChildrenCount(root);
    for (int i = 0; i < count; i++)
    {
        var child = VisualTreeHelper.GetChild(root, i);
        yield return child;
        foreach (var descendants in child.GetVisuals())
        {
            yield return descendants;
        }
    }
}

Затем вы можете сделать следующее:

foreach (var control in LayoutRoot.GetVisuals().OfType<Control>())
{
    //handle control of type <Control>
}
1 голос
/ 04 января 2011

Метод BrokenGlass работает наверняка, но он немного тупой.Вот упрощенный способ сделать это:

Когда вы создаете элемент управления в VisualStudio или Blend, обычно вы получаете UserControl с сеткой внутри.

<UserControl x:Class="RHooligan"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     Height="300" Width="300">
<Grid x:Name="RootElement>

</Grid>

Предполагая, что Root-элемент вашего UserControl является элементом управления контейнера (Grid, StackPanel, Canvas и т. Д.), И вы назвали его RootElement , вы можете сделать это для перебора его дочерних элементов.

      foreach(FrameworkElement element in RootElement.Children)
  {
    //do something with element
    //////////////////////////
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...