Имея {Binding ElementName=foo}
, он будет искать визуальное или логическое дерево?
Логических и визуальных деревьев в WPF | Data See, Data Do
Когда имеет значение логическое дерево?
При поиске имени, например, в {Binding ElementName = Foo}, поиск поднимает родословную в поисках name scope, снова так же, как и для наследуемые свойства.
привязка ElementName в Silverlight через привязанные действия
Чтобы включить это, WPF предоставляет ElementName и RelativeSource привязки, давая вам мощный механизм размещения других элементов в вашем визуальном дереве для привязки к
EDIT:
Похоже на логическое дерево, используемое для привязки ElementName
.
Аргумент № 1.
Согласно статье MSDN FrameworkElement Class:
FrameworkElement расширяет UIElement и добавляет следующие возможности:
- Поддержка привязки данных и динамические ссылки ресурсов: поддержка уровня данных на уровне объектов привязка и ресурсы по классу DependencyProperty и воплощенный в системе собственности, но возможность разрешения значения члена который хранится как выражение ( программирования, которая лежит в основе как привязка данных, так и динамическая ресурсов) осуществляется FrameworkElement. Для большего информацию, см. Обзор привязки данных и Обзор ресурсов.
Аргумент № 2.
ElementName
указывает на x:Name
, поэтому это имя должно быть найдено каким-то образом. Существует концепция NameScope.
Для большинства сценариев FindName методы, выставленные на FrameworkElement и FrameworkContentElement - это больше подходящие методы для вызова для элементов по имени. Имя свойства, выставленные FrameworkElement и FrameworkContentElement - это больше подходящие свойства для установки начальное имя в качестве атрибутов разметки. И методы RegisterName на FrameworkElement и FrameworkContentElement необходим установить имя в конкретном прозвище (отсутствует NameScope член, который может сделать это напрямую; вы должен сначала установить текущий указатель для использования RegisterName).
С другой стороны, Visual class не имеет метода FindName
и не реализует INameScope.