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