x: Ключ действителен только внутри словаря ресурсов и добавляется в словарь , x: Имя используется локально и представляет переменную внутри класса.
x:Name
используется для наименования элементов пользовательского интерфейса (например, элементов управления, панелей и т.д.), тогда как x:Key
используется для идентификации ресурсов (которые могут быть более или менее любыми) в ResourceDictionary
.
Это означает, что вы не можете ссылаться на вещи в словаре ресурсов, используя значение x:Name
:
<Grid>
<Grid.Resources>
<Style x:Name="StyleName" x:Key="StyleKey" />
</Grid.Resources>
<Button Style="{StaticResource StyleName}" /> <!-- Will not work-->
<Button Style="{StaticResource StyleKey}" /> <!-- Will work -->
</Grid>
Вы также заметите, что элементы, которые не находятся в словаре ресурсов, не могут иметь атрибут x:Key
:
<TextBox x:Key="TextBoxKey" /> <!-- Will not compile -->
Да, вы должны использовать x: Key для назначения ключа ресурсам внутри ResourceDictionary либо локально в разделе ресурсов для элемента, либо в конкретном ResourceDictionay. Затем этот ключ используется для поиска ресурса через {DynamicResource XXX} или {StaticResource XXX}.
x: Name используется для присвоения имени элементу управления в xaml. Затем это можно использовать для доступа к элементу в коде за файлом, используя обычный синтаксис или используя привязку ElementName внутри файла.