В моем приложении я хочу разрешить пользователю загружать несколько произвольных файлов XAML. Внутренне я использую XamlReader.Load()
для загрузки XAML.
Теперь может случиться, что некоторые из XAML имеют именованные элементы управления, такие как
<Button Name="button" ... />
Если пользователь случайно загрузил 2 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());
- комбинаций вышеперечисленных