Хотя они используются для аналогичных целей, они не являются взаимозаменяемыми. x: Ключ используется для элементов, которые добавляются в качестве значений в словарь, чаще всего для стилей и других ресурсов, которые добавляются в ResourceDictionary. При установке атрибута x: Key, на самом деле нет соответствующего свойства объекта или даже устанавливаемого присоединенного свойства зависимости. Он просто используется процессором XAML, чтобы знать, какой ключ использовать при вызове Dictionary.Add.
x: Имя немного сложнее. Он используется для применения связанного имени к объекту (обычно объекту, производному от FrameworkElement) в рамках некоторого родительского элемента. Эта область называется «именной областью», и самый простой способ думать об этом - представить UserControl, содержащий <TextBox x:Name="foo" />
.
Затем вы можете поместить несколько экземпляров UserControl в окно, не сталкиваясь с именем «foo», поскольку каждый UserControl имеет свою собственную область имен.
Стоит также отметить, что FrameworkElement определяет свойство зависимости с именем Name, которое эквивалентно установке x: Name.
Другое отличие состоит в том, что XAML-конструктор создает элементы в коде для элементов, которые имеют x: Name. Это не относится к объектам, добавляемым в словарь с использованием x: Key.
Дополнительную информацию об этом можно найти в разделе замечаний документации MSDN для директивы x: Name .