1

我有以下 XAML 工作得很好,因为它为每个最近的文件生成一个最近的文件菜单项和一个子菜单项:

<MenuItem Header="Recent Files" ItemsSource="{Binding RecentFiles}">
    <MenuItem.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Command" Value="{Binding Open}" />
            <Setter Property="Header" Value="{Binding Name}" />
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>

这是在文件菜单中,并产生一个类似这样的菜单结构:

File
  New
  Open
  Save
  Save As
  --
  Recent Files
    File 1
    File 2
    File 3

希望你明白了......但我真的不希望最近文件的父菜单项,我希望最近的文件只是在文件菜单的末尾,更像这样:

File
  New
  Open
  Save
  Save As
  --
  File 1
  File 2
  File 3

我怎样才能做到这一点?我是否可以在 MenuItem.ItemContainerStyle 周围放置一个“虚拟”容器元素,而不是最近的文件 MenuItem,或者我应该以完全不同的方式这样做吗?

谢谢

斯图尔特

4

1 回答 1

1

也许您可以使用CompositeCollection该类来实现您想要的,并且您需要添加一个CollectionViewSource以将RecentFiles 公开给CollectionContainer

<Menu>
    <Menu.Resources>
        <CollectionViewSource x:Key="RecentFilesCvs" Source="{Binding RecentFiles}" />
    </Menu.Resources>
    <MenuItem Header="File">
        <MenuItem.ItemsSource>
            <CompositeCollection>
                <MenuItem Header="New"/>
                <MenuItem Header="Open"/>
                <MenuItem Header="Save"/>
                <MenuItem Header="Save As"/>
                <Separator/>
                <CollectionContainer Collection="{Binding Source={StaticResource RecentFilesCvs}"/>
            </CompositeCollection>
        </MenuItem.ItemsSource>
    </MenuItem>
</Menu>
于 2014-08-12T21:02:02.550 回答