Имена, данные элементам в Xaml, должны быть уникальными в пределах namescope .Каждое выполнение LoadComponent создает новую область имен.Следовательно, имена в UserControl
не будут конфликтовать в визуальном дереве при использовании нескольких экземпляров элемента управления.
Таким образом, ответ на вопрос в том виде, в каком он сейчас существует, таков: потому что вы делаете что-то не так.
Что такое «что-то», сейчас неясно.Возможно, если вы включите свой xaml в вопрос, мы можем вам помочь.
Редактировать
Так что, читая между строк, я думаю, вы это делаете.У вас есть UserControl, у которого есть номер для свойств, и вы хотите, чтобы элементы управления в UserControl связывались с этими свойствами, поэтому вы делаете это: -
<StackPanel Orientation="Horizontal" DataContext="{Binding ElementName=UserControl}">
Это будет означать, что вы добавили Name="UserControl"
кЭлемент <UserControl..
вверху его xaml.
Я не могу найти способ воспроизвести вашу проблему, но я знаю о проблемах с более ранними версиями SL, где этот подход является проблемой.Лично я думаю, что лучше избегать установки свойств, которые действительно принадлежат внешнему потребителю компонента (вплоть до страницы, которая использует вас, UserControl, каково его имя и должно ли оно вообще иметь имя).
Отсюда мой подход к решению этой проблемы «Привязать к самому UserControl»: -
<StackPanel Orientation="Horizontal" DataContext="{Binding ElementName=LayoutRoot.Parent}">
, где LayoutRoot - это имя верхнего уровня Grid
, являющегося корнем содержимого UserControl.Это все еще привязывается к самому UserControl через свойство Grid Parent
.Однако для этого не требуется добавлять имя в сам UserControl в своем собственном xaml.