В XAML действительно есть только одно имя, x: Name. Фреймворк, такой как WPF, может при желании отобразить одно из своих свойств в xAMName XAML, используя атрибут RuntimeNamePropertyAttribute для класса, который определяет одно из свойств классов как сопоставление атрибуту x: Name в XAML.
Причина, по которой это было сделано, состояла в том, чтобы позволить средам, которые уже имеют понятие «Имя» во время выполнения, таких как WPF. Например, в WPF FrameworkElement вводит свойство Name.
Как правило, классу не нужно хранить имя для x: Name, чтобы его можно было использовать. Все x: Name означает, что XAML создает поле для хранения значения в коде класса. То, что среда выполнения делает с этим отображением, зависит от структуры.
Итак, почему есть два способа сделать одно и то же? Простой ответ, потому что есть две концепции, отображенные на одно свойство. WPF хочет, чтобы имя элемента сохранялось во время выполнения (которое, среди прочего, можно использовать через Bind), а XAML нужно знать, какие элементы вы хотите получить доступ к полям в коде класса. WPF связывает их вместе, помечая свойство Name как псевдоним x: Name.
В будущем XAML будет более широко использоваться для x: Name, например, позволяя устанавливать свойства, ссылаясь на другие объекты по имени, но в 3.5 и более ранних версиях он используется только для создания полей.
Вопрос о том, следует ли вам использовать тот или иной вопрос - вопрос стиля, а не технического. Я оставлю это другим для рекомендации.
См. Также AutomationProperties.Name VS x: Name, AutomationProperties.Name используется инструментами специальных возможностей и некоторыми инструментами тестирования.
см. В чем разница между атрибутами x: Name и Name в WPF?