Question: What is the difference between x:Key and x:Name in WPF?

Answer: 
`x:Name` is used to name UI elements (e.g. Controls, Panels etc), whereas `x:Key` is used to identify resources (which can be more or less anything) within a `ResourceDictionary`.

This means that you can't reference things in a resource dictionary using an `x:Name` value:

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

```

You will also notice that elements that are not within a resource dictionary cannot have an `x:Key` attribute:

```
<TextBox x:Key="TextBoxKey" /> <!-- Will not compile -->

```
Yes, you would use x:Key to assign a key to resources inside a ResourceDictionary, either locally in the resources section for an element or a specific ResourceDictionay. This key is then used to look up the resource, through {DynamicResource XXX} or {StaticResource XXX}. 

x:Name is used to assign a name to a control in xaml. This can then be used to access the element in the code behind file, using the usual syntax or using an ElementName binding inside the file.