Заполнение MenuItem составной коллекцией "удвоение" вверх
Я пытаюсь заполнить пункт меню коллекцией дочерних элементов. Это было легко, однако мне нужно добавить дополнительный, который всегда присутствует, который выполняет операцию добавления. Я использовал составную коллекцию, чтобы добавить ее к существующей коллекции элементов, которые необходимо отобразить.
Вот код:
<MenuItem Header="Time Ranges" x:Name="TimeRangesMenuItem"
Background="{StaticResource TitleBarButtonBackgroundBrush}"
Margin="2">
<MenuItem.Resources>
<CollectionViewSource Source="{Binding ElementName=TimeRangesMenuItem, Path=DataContext.TimeSpans}" x:Key="TimeSpanMenuItems" />
</MenuItem.Resources>
<MenuItem.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={StaticResource TimeSpanMenuItems}}" />
<Separator />
<MenuItem Header="Add New" cal:Message.Attach="NewTimeSpan()" />
</CompositeCollection>
</MenuItem.ItemsSource>
<MenuItem.ItemTemplate>
<ItemContainerTemplate>
<MenuItem Header="{Binding Name}" cal:Message.Attach="ConfigureTimeSpan()" />
</ItemContainerTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
Это работает, почти. Объекты DataContext. TimeSpans ViewModel, которые я пытаюсь отобразить, "вложены" в два элемента MenuIms, а не просто заполняют один, поэтому я получаю это странное поведение (у этого есть только один TimeSpanViewModel "Time Span":
Мышь вне "внутреннего" MenuItem. Обратите внимание, что внутренний функционален, если нажать на него:
Обычный MenuItem:
У кого-нибудь есть идеи, как это исправить?
1 ответ
Что такое предмет ItemContainerTemplate
...
Я думаю, что вы хотите манипулировать MenuItem.ItemContainerStyle
вместо этого вы создаете два MenuItems
как заметил.
MenuItem.ItemTemplate
уже определяет, что находится внутри данного контейнера элемента (зависит от управления, здесь MenuItem
, в ComboBox
это ComboBoxItem
, так далее.). Поскольку там, кажется, нет ItemContainerTemplate
собственность на MenuItem
Вы можете использовать его только таким образом, реализуя селектор, который возвращает ваш шаблон и устанавливая его как ItemContainerTemplateSelector
,