1

我正在尝试使用一组子项填充菜单项。这很容易,但是我需要添加一个始终存在的额外功能,它执行“添加”操作。我使用复合集合将其添加到需要显示的现有项目集合中。

这是代码:

<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.TimeSpan ViewModel 是“嵌套”在两个 MenuItem 内,而不是仅仅填充一个,所以我得到了这种奇怪的行为(这只有一个 TimeSpanViewModel“时间跨度”:

鼠标在“内部”MenuItem 之外。请注意,如果您按下它,内部的功能会起作用:

在此处输入图像描述

普通菜单项:

在此处输入图像描述

有人对如何解决这个问题有任何想法吗?

4

1 回答 1

1

什么是物品ItemContainerTemplate...

我认为你想操纵MenuItem.ItemContainerStyle相反,否则你会创建两个MenuItems观察到的。


已经定义了给定项目容器内的MenuItem.ItemTemplate内容(因控件而异,here MenuItem, in a ComboBoxit's aComboBoxItem等)。由于似乎没有ItemContainerTemplate 属性MenuItem您可能只能以这种方式使用它,实现返回模板并将其设置为的选择器ItemContainerTemplateSelector

于 2016-04-01T17:47:06.740 回答