我想显示最近打开的文件列表,所以有一个"file" MenuItem

这是我现在拥有的xaml:

<MenuItem Header="File}">
  <MenuItem Header="Preferences..." Command="{Binding ShowOptionsViewCommand}" />
  <Separator />
  <ItemsControl ItemsSource="{Binding RecentFiles}">
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <MenuItem Header="{Binding DisplayPath}" CommandParameter="{Binding}"
            Command="{Binding Path=DataContext.OpenRecentFileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">
        </MenuItem>
      </DataTemplate>
    </ItemsControl.ItemTemplate>
  </ItemsControl>
  <Separator />
  <MenuItem Header="Exit" Command="{Binding CloseCommand}" />
</MenuItem>

但是,当我使用此代码时,MenuItem周围有一个怪异的偏移量,并且似乎在它们周围有一个容器。我该如何摆脱呢?

这是它的屏幕截图:

alt text http://www.cote-soleil.be/FileMenu.png

最佳答案

“怪异的偏移量”是MenuItem。父MenuItem已经为您生成了一个子MenuItem,但是您的DataTemplate添加了第二个。试试这个:

<MenuItem Header="File}">
  <MenuItem Header="Preferences..." Command="{Binding ShowOptionsViewCommand}" />
  <Separator />
  <ItemsControl ItemsSource="{Binding RecentFiles}">
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <TextBlock Text="{Binding DisplayPath}"/>
      </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemContainerStyle>
      <Style TargetType="MenuItem">
        <Setter Property="Command" Value="{Binding DataContext.OpenRecentFileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>
        <Setter Property="CommandParameter" Value="{Binding}"/>
      </Style>
    </ItemsControl.ItemContainerStyle>
  </ItemsControl>
  <Separator />
  <MenuItem Header="Exit" Command="{Binding CloseCommand}" />
</MenuItem>

请注意,仅包含TextBlock的简化DataTemplateItemContainerStyle可以在生成的MenuItem上设置属性。

关于wpf - 如何在WPF中将MenuItems的数据绑定(bind)列表合并到另一个MenuItem中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1399159/

10-13 06:00