1 回答
TA贡献1873条经验 获得超9个赞
一种方法可能是向根提供x:Name Grid:
<Grid x:Name="LayoutRoot">
...
</Grid>
然后在您的代码中,您可以按名称找到探针用户控件。像这样的东西:
var probe = LayoutRoot.GetChildByName<ProbeTestControl>($"probe{probe_number}");
这是我使用的扩展方法:
public static T GetChildByName<T>(this FrameworkElement element, string name)
where T : FrameworkElement
{
if (element == null) return null;
return (T)element.FindName(name) ?? element.GetChildrenOfType<T>().FirstOrDefault(c => c.Name == name);
}
public static IEnumerable<T> GetChildrenOfType<T>(this DependencyObject element)
where T : DependencyObject
{
return element.GetChildrenRecursive().OfType<T>();
}
private static IEnumerable<DependencyObject> GetChildrenRecursive(this DependencyObject element)
{
if (element == null)
{
throw new ArgumentNullException(nameof(element));
}
for (var i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
{
var child = VisualTreeHelper.GetChild(element, i);
yield return child;
foreach (var item in child.GetChildrenRecursive())
{
yield return item;
}
}
}
只要所有探测器都存在于同一个 XAML 树中,一切都应该有效。
我希望这有帮助。
- 1 回答
- 0 关注
- 116 浏览
添加回答
举报