如何在C#中按名称查找动态创建的XAML组件?
我创建了下一个按钮并将其放入堆栈面板。
var nextButton = new Button();
nextButton.Name = "NextBtn";
next.Children.Add(nextButton);
然后尝试用
找到它this.FindName("NextBtn")
它始终为空。
我做错了什么?
答案 0 :(得分:1)
使用RegisterName
代替nextButton.Name = "NextBtn";
var nextButton = new Button();
RegisterName("NextBtn", nextButton);
next.Children.Add(nextButton);
然后您可以通过以下方式找到它:
this.FindName("NextBtn")
答案 1 :(得分:0)
您可以手动找到该按钮,例如:
foreach (var child in next.Children)
{
if (child is Button && (child as Button).Name == "NextBtn")
;// do what you want with this child
}
或者:
var btn = next.Children.OfType<Button>().FirstOrDefault(q => q.Name == "NextBtn");
if (btn != null)
;// do what you want
答案 2 :(得分:0)
正如Farhad Jabiyev所说,我创建了副本。
作为相关问题(FindName returning null)解释
来自此页https://msdn.microsoft.com/en-us/library/ms746659.aspx
初始加载和处理后对元素树的任何添加 必须为该类调用RegisterName的相应实现 它定义了XAML名称范围。否则,添加的对象不能 通过FindName等方法按名称引用。仅仅设置一个 Name属性(或x:Name Attribute)不会将该名称注册到 任何XAML名称范围。