Рассмотрим следующий XAML-файл:
<Window x:Class="ExpressionVisualizer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sle="clr-namespace:System.Linq.Expressions;assembly=System.Core"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type sle:BinaryExpression}"/>
<ControlTemplate TargetType="{x:Type ContentControl}"/>
</Window.Resources>
</Window>
Это приводит к следующей ошибке компиляции:
Все объекты, добавленные в IDictionary, должны иметь атрибут Key или какой-либо другой типключ, связанный с ними.Строка 10. Позиция 10.
Если я добавлю атрибут x:key
в ControlTemplate, он скомпилируется.Однако я не должен был этого делать.ControlTemplate украшен атрибутом DictionaryKeyProperty, который указывает TargetType в качестве ключевого свойства.Поэтому, пока я указываю TargetType для моего ControlTemplate, я должен , а не указывать явный ключ (аналогично тому, как мне не нужно указывать его в DataTemplate, который я определил).
У меня второй и касательно связанный вопрос.Если я определю ControlTemplate таким способом (либо с указанием ключа, либо без него) в XAML, автоматически ли он будет применен ко всем элементам управления типа ContentControl, которые не указывают другой шаблон, или мне придется встроить ControlTemplate в стильчтобы это произошло?