您好我有一个用户控件,我需要来自此用户控件的所有文本框,按钮等 这有一种方式,我拥有所有这些元素? 感谢
答案 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
//////////////////////////
}