在我的应用程序中,我希望允许用户加载多个任意XAML文件。在内部,我使用XamlReader.Load()
加载XAML。
现在,某些XAML可能已命名控件,例如
<Button Name="button" ... />
如果用户不小心加载了两个定义相同名称的XAML,则会发生异常,说
无法注册命名对象。无法在此范围内注册重复的名称“按钮”。
所以我的下一步是在加载XAML之前注销所有名称:
foreach (FrameworkElement child in ((Grid) Content).Children)
{
if (!string.IsNullOrEmpty(child.Name))
{
UnregisterName(child.Name);
}
}
但是,这还不够,出于相同的原因,我仍然无法加载XAML。
如何删除控件的名称?
注意:在对此进行研究时,我发现了很多关于“如何删除控件名称的问题”的答案。那不是我想要的我想保留该控件,但取消命名。
注意:我不是在寻找解决方法。我知道我可以将XAML处理为纯XML,删除名称,然后加载它。我真的很想知道是否以及如何以WPF方式做到这一点。
我也尝试过:
child.Name = null;
更改名称NameScope.SetNameScope(this, new NameScope());
更改范围