WPF中的HierarchicalDataTemplate.ItemTemplate中如何水平拉伸ContextMenu MenuItem

7
我有一个WPF系统托盘应用程序。右键单击托盘图标时,会出现一个ContextMenu,使用HierarchicalDataTemplate获取一个动态填充的二级菜单。它工作正常,但是第二级项目的“可点击”部分没有正确地延伸到父控件的可用宽度。如下图所示:

Picture of menu where 2nd level items dont fill the parent control

现在用户必须单击MenuItem中较暗的部分(文本所在的位置)才能执行此项的Command。我希望整个菜单行都能触发Command
以下是我的XAML:
<CollectionViewSource x:Key="Items" Source="{Binding Path=Items}" />
<ContextMenu x:Shared="false" x:Key="Menu" HorizontalContentAlignment="Stretch">
    <ContextMenu.ItemTemplate>
        <HierarchicalDataTemplate DataType="SystemTrayItemsViewModel" ItemsSource="{Binding Items}">
            <StackPanel Orientation="Horizontal">
            <Image Source="{Binding Converter={StaticResource TabIconConverter}}" />
            <TextBlock Text="{Binding Name}" />
            </StackPanel>
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding Text}" ToolTip="{Binding ToolTip}" Command="{Binding ToClipBoardCommand}" HorizontalContentAlignment="Stretch" />
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </ContextMenu.ItemTemplate>
    <ContextMenu.ItemsSource>
        <CompositeCollection>
            <CollectionContainer Collection="{Binding Source={StaticResource Items}}">
            </CollectionContainer>
            <Separator />
            <MenuItem Header="Exit" cal:Message.Attach="ExitApplication" />
        </CompositeCollection>
    </ContextMenu.ItemsSource>
</ContextMenu>

查看完整源代码,请访问https://github.com/kasperhlund/textgrunt


你能找到解决这个问题的方法吗?我也遇到了这个问题,但与HierarchicalDataTemplate无关。这个问题与使用CompositeCollection绑定VM的集合以及在xaml中定义MenuItems有关。 - undefined
1个回答

0

我刚在另一个SO问题中找到了答案。

看起来问题是在ItemTemplate中指定了MenuItem。显然,ContextMenuItemTemplate周围包裹了另一个MenuItem,导致了这种嵌套效果。相反,你必须通过MenuItemStyle来实现:

<ContextMenu>
   <ContextMenu.Resources>
      <Style TargetType="{x:Type MenuItem}">
         <Setter Property="Header" Value="{Binding Text}"/>
         <Setter Property="ToolTip" Value="{Binding ToolTip}"/>
         <Setter Property="Command" Value="{Binding ToClipBoardCommand}"/>
         <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
      </Style>
   </ContextMenu.Resources>
</ContextMenu>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接