Удалить имя из элемента управления WPF - PullRequest
0 голосов
/ 26 августа 2018

В моем приложении я хочу разрешить пользователю загружать несколько произвольных файлов 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());
  • комбинаций вышеперечисленных
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...