0

我想获取silverlight页面的所有控件的ID。所以我想遍历 xaml 页面中的所有控件。为此,我使用了以下代码:

 private List<UIElement> GetElement(UIElement parent, Type targetType)
    {
        List<UIElement> items = new List<UIElement>();
        int count = VisualTreeHelper.GetChildrenCount(parent);
        if (count > 0)
        {
            for (int i = 0; i < count; i++)
            {
                UIElement child = (UIElement)VisualTreeHelper.GetChild(parent, i);
                if (child.GetType() == targetType)
                {
                    items.Add(child);
                }
            }
        }
        return items;
    }

我在我的按钮单击事件上调用上述函数,如下所示。

    List<UIElement> lsttexts = GetElement(LayoutRoot, typeof(System.Windows.Controls.SLFramework.UniTextBox));
        List<UIElement> lstlabels = GetElement(LayoutRoot, typeof(TextBlock));
        List<UIElement> lstbtn = GetElement(LayoutRoot, typeof(Button));
        List<UIElement> lstcombo = GetElement(LayoutRoot, typeof(ComboBox));
        List<UIElement> lstStackpanel = GetElement(LayoutRoot, typeof(StackPanel));

我的页面的演示示例:

  <TextBlock Text="Name : " Grid.Row="0" Grid.Column="0"  HorizontalAlignment="Left" VerticalAlignment="Center" />
    <StackPanel x:Name="stkpnl"  Grid.Row="0" Grid.Column="1" Orientation="Vertical">
        <StackPanel x:Name="childpanel1" Orientation="Horizontal">
            <TextBlock x:Name="lbl1" Text="Name : "  HorizontalAlignment="Left" VerticalAlignment="Center" />
            <TextBox x:Name="txt1" Text="=test1"></TextBox>
        </StackPanel>
        <StackPanel x:Name="childpanel11" Orientation="Horizontal">
            <TextBlock x:Name="lbl11" Text="Name : "  HorizontalAlignment="Left" VerticalAlignment="Center" />
            <TextBox x:Name="txt11" Text="=test11"></TextBox>
        </StackPanel>
    </StackPanel>

它获取 satckpanel、listitem 和选项卡控件之外的所有文本框和文本框。

但我想获得对 TabControl、statckpanel 和 Listitem 内的所有页面的控制。

谢谢

4

0 回答 0