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 關注
- 173 瀏覽
添加回答
舉報