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 -->