Заполнение 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,

Другие вопросы по тегам