Подтвердить что ты не робот

Какая разница между x: Key и x: Name в WPF?

В чем разница между x:Key и x:Name в WPF?

Я не уверен, какова истинная разница.

4b9b3361

Ответ 1

Хотя они используются для аналогичных целей, они не являются взаимозаменяемыми. x: Ключ используется для элементов, которые добавляются как значения в словарь, чаще всего для стилей и других ресурсов, которые добавляются в ResourceDictionary. При настройке атрибута x: Key на объекте фактически отсутствует соответствующее свойство или даже установленное свойство зависимостей. Он просто используется процессором XAML, чтобы узнать, какой ключ использовать при вызове Dictionary.Add.

x: Имя немного сложнее. Он использовал для привязки связанного имени к объекту (обычно к объекту, полученному из FrameworkElement) в рамках какого-либо родительского элемента. Эта область называется "namescope", и самый простой способ подумать - представить себе UserControl, который содержит <TextBox x:Name="foo" />.

Затем вы можете поместить несколько экземпляров UserControl в окно без столкновения имени "foo", потому что каждый UserControl имеет свой собственный прозор.

Стоит также отметить, что FrameworkElement определяет свойство зависимостей Name, которое эквивалентно установке x: Name.

Другое отличие состоит в том, что конструктор XAML создает элементы в коде для элементов, имеющих x: Name. Это не относится к объектам, добавленным в словарь, используя x: Key.

Дополнительную информацию об этом вы можете найти в разделе примечаний документации MSDN для директивы x: Name.

Ответ 2

x: Ключ действителен только в области элемента ResourceDictionary. x: Ключ используется в качестве основного идентификатора для элементов в ResourceDictionary.

С другой стороны, x: Name является допустимым в области всего, кроме ResourceDictionary. x: Ключ недопустим вне области ResourceDictionary.