用户控件或网格中的元素列表

时间:2011-01-04 00:56:31

标签: c# silverlight

您好我有一个用户控件,我需要来自此用户控件的所有文本框,按钮等 这有一种方式,我拥有所有这些元素? 感谢

2 个答案:

答案 0 :(得分:4)

您可以使用VisualTreeHelper来实现这一目标。

有一篇文章here提供了以下扩展方法来提供帮助:

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 :(得分:1)

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>

假设您的UserControl的Root元素是一个容器控件(Grid,StackPanel,Canvas等)并且您已将其命名为 RootElement ,则可以执行此操作来迭代它的子项。

      foreach(FrameworkElement element in RootElement.Children)
  {
    //do something with element
    //////////////////////////
  }