我想获取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 内的所有页面的控制。
谢谢