使用复合集合 "doubling" 向上填充 MenuItem
Populating MenuItem with composite collection "doubling" up
我正在尝试用一组子项填充菜单项。这很容易,但是我需要添加一个始终存在的额外内容来执行 "add" 操作。我使用复合集合将其添加到需要显示的现有项目集合中。
代码如下:
<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 是 "nested" 在两个 MenuItems 中,而不是仅仅填充一个,所以我得到了这种奇怪的行为(这只有一个 TimeSpanViewModel "Time Span":
鼠标在 "inner" 菜单项之外。请注意,如果按下它,内部的功能将起作用:
普通菜单项:
有人知道如何解决这个问题吗?
什么是项目ItemContainerTemplate
...
我认为您想改为操纵 MenuItem.ItemContainerStyle
,否则您会创建两个 MenuItems
。
MenuItem.ItemTemplate
已经定义了给定项目容器内的内容(因控件而异,这里 MenuItem
,在 ComboBox
中是 ComboBoxItem
,等等) .由于在 MenuItem
上似乎没有 ItemContainerTemplate
属性,您可能只能以这种方式使用它来实现选择器 returns 您的模板并将其设置为 ItemContainerTemplateSelector
.
我正在尝试用一组子项填充菜单项。这很容易,但是我需要添加一个始终存在的额外内容来执行 "add" 操作。我使用复合集合将其添加到需要显示的现有项目集合中。
代码如下:
<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 是 "nested" 在两个 MenuItems 中,而不是仅仅填充一个,所以我得到了这种奇怪的行为(这只有一个 TimeSpanViewModel "Time Span":
鼠标在 "inner" 菜单项之外。请注意,如果按下它,内部的功能将起作用:
普通菜单项:
有人知道如何解决这个问题吗?
什么是项目ItemContainerTemplate
...
我认为您想改为操纵 MenuItem.ItemContainerStyle
,否则您会创建两个 MenuItems
。
MenuItem.ItemTemplate
已经定义了给定项目容器内的内容(因控件而异,这里 MenuItem
,在 ComboBox
中是 ComboBoxItem
,等等) .由于在 MenuItem
上似乎没有 ItemContainerTemplate
属性,您可能只能以这种方式使用它来实现选择器 returns 您的模板并将其设置为 ItemContainerTemplateSelector
.