Я пытаюсь создать собственный Silverlight ItemsControl. Я хочу, чтобы пользователи этого элемента управления добавляли элементы с использованием XAML. Предметами будут другие элементы пользовательского интерфейса. Я хотел бы добавить поле вокруг всех добавленных элементов, и поэтому я хочу добавить ItemTemplate.
Я пытаюсь сделать это с помощью ItemsControl.ItemTemplate, но, похоже, он не используется при привязке к элементам в XAML, т.е. с использованием свойства ItemsControl.Items.
Однако, если я использую свойство ItemsControl.ItemsSource, используется ItemTemplate.
Можно ли в любом случае использовать ItemTemplate, хотя я не назначаю ItemsSource?
Это мой код
<ItemsControl x:Class="MyControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate >
<toolkit:WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Margin="20" Background="Red">
<TextBlock Text="Test text"/>
<ContentPresenter Content="{Binding}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.Template>
<ControlTemplate>
<Border>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ItemsPresenter x:Name="ItemsPresenter"/>
<Button Command="{Binding SearchCommand}"/>
</Grid>
</Border>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
И когда я использую свой контроль
<MyControl>
<Button Content="Button"/>
<Button Content="Button"/>
</MyControl>
Это дало мне отображение элементов с макетом панели переноса, но без примененного шаблона данных.
Затем я нашел этот пост , в котором упоминалось два метода переопределения.
Сын в моем коде позади класса, который у меня сейчас
protected override bool IsItemItsOwnContainerOverride(object item)
{
return false;
}
protected override void PrepareContainerForItemOverride(DependencyObject element,
object item)
{
base.PrepareContainerForItemOverride(element, item);
((ContentPresenter)element).ContentTemplate = ItemTemplate;
}
НО - это дает мне два элемента со стилем (например, красным текстовым блоком), но без реального содержимого. Кнопки в списке не добавляются. Такое ощущение, что я делаю что-то не так - есть какие-нибудь указатели на что?
Спасибо!