Как WPF решает те же проблемы ElementName? - PullRequest
0 голосов
/ 10 мая 2018

Скажите, что следующий HierarchicalDataTemplate отображает 2 набора данных.Тогда есть 2 ListBox с тем же x: Name = "MyListBoxName".Как WPF знает, какой из них передать как CommandParameter ????

<HierarchicalDataTemplate ItemsSource="{Binding SubNodes}">
      <ListBox x:Name="MyListBoxName">
      <i:Interaction.Triggers>
       <i:EventTrigger EventName="SelectionChanged">
        <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}, Path=DataContext.SelectedCommand}" CommandParameter="{Binding ElementName=MyListBoxName}"/>
       </i:EventTrigger>
      </i:Interaction.Triggers>
    </HierarchicalDataTemplate>

Спасибо:)

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

WPF использует нечто похожее на всплывающее событие при разрешении имени.

Поскольку он находит элемент с именем MyListBoxName в своем непосредственном родительском шаблоне, он будет использовать его.

Если нет, он попытается найти его в родительском шаблоне родительского шаблона и так далее.

Вот почему в вашем случае он компилируется и работает отлично, но не работает, если вы пытаетесь добавить дублированное имя в тот же шаблон

0 голосов
/ 10 мая 2018

WPF использует Namescopes для разделения имен, где могут быть конфликты.

Так же, как визуальное дерево содержит дерево элементов, существует дерево имен, построенное из визуального дерева, которое определяет иерархию именованных элементов.Он предотвращает конфликты в пределах одной и той же области и позволяет искать во вложенных областях именованные элементы.

Стили и шаблоны в WPF предоставляют возможность повторного использования и повторного применения содержимого простым способом.Однако стили и шаблоны могут также включать элементы с именами XAML, определенными на уровне шаблона.Один и тот же шаблон может использоваться на странице несколько раз.По этой причине стили и шаблоны определяют свои собственные области имен XAML, независимо от того, какое место в дереве объектов применяется к стилю или шаблону.

В полной статье подробно рассказывается окак имена разрешаются в обычных и вложенных областях, в том числе в стилях и шаблонах.

0 голосов
/ 10 мая 2018

Это не так, поэтому я не верю, что это работает.

Почему вы все равно передаете элемент пользовательского интерфейса в качестве параметра к текстовому тексту данных? Я предполагаю, что вы можете делать то, что вы хотите, но просто нужно думать об этом по-другому.

...