2010-12-13 1 views
45

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

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

+1

@Alastair, вопрос, который вы указали как возможный обман, не имеет к этому отношения. – Josh

+1

как это дублировать? Другой вопрос говорит о 'Name' vs' Type'. Этот вопрос касается 'Key' vs' Name'. – jalf

+0

Моя ошибка, я неправильно понял вопрос «возможный обман». Извиняюсь. –

ответ

43

Хотя они используются для аналогичных целей, они не являются взаимозаменяемыми. 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 для the x:Name directive.

20

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

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

Смежные вопросы