Это больше похоже на предупреждение, чем на ошибку - просто объясняю, почему ваши объявленные ItemTemplate
и ListBoxItem
s не будут работать вместе.
edit
В ответ на ваш комментарий рассмотрим следующее:
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.Items>
<System:String>One</System:String>
<System:String>Two</System:String>
<ListBoxItem Background="Red">Three</ListBoxItem>
<ListBoxItem>
<ListBoxItem.Template>
<ControlTemplate>
<Button Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}"
Background="Blue"
Foreground="White"
/>
</ControlTemplate>
</ListBoxItem.Template>
<ListBoxItem.Content>
Four
</ListBoxItem.Content>
</ListBoxItem>
</ListBox.Items>
</ListBox>
Представьте, что ItemTemplate
определяет способ отображения типа элемента.Для элементов «Один» и «Два», которые являются строками, ItemTemplate
определяет, как отобразить это, а переносит результат в ListBoxItem
.
Если, однако, предмет уже a ListBoxItem
- Это не тот предмет, с которым
ItemTemplate
обязательно может иметь дело, потому что ItemTemplate
является DataTemplate
и ListBoxItem
может определять свои собственные свойства, стиль и шаблон.
Итак, если вы явно создаете ListBoxItem
s, я думаю, что этолучше, чтобы WPF уважал возможность настраивать стиль этого элемента, а не переопределял все это с помощью ItemTemplate
.
В этом прелесть использования ItemTemplates
- вы можете использовать их, смешивать, сопоставлять,и искалечить их, обычно не беспокоясь о ListBoxItem
.Единственный раз, когда мне приходилось иметь дело с ListBoxItem
напрямую, - это когда я создаю для него стиль - декларирование его как элемента в явном виде, вероятно, в лучшем случае редкий случай.