You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF绑定集合生成的MenuItem取消整体选中与缩进问题

问题描述

我有一个MenuItem,其子项通过ItemsControl的ItemsSource集合生成。在XAML中直接添加的MenuItem,鼠标悬停时仅自身显示选中状态(见下图);但绑定集合生成的项会出现“选中整个集合”的效果,还会产生缩进(见下图),请问如何禁用此效果?

示例代码

XAML

<MenuItem 
    Name="Template" 
    Header="Startmall"/>
<MenuItem 
    Header="Symboler" 
    Name="CustomerSymbols">
    <MenuItem Header="Test1"/>
    <MenuItem Header="Test2"/>
    <MenuItem Header="Test3"/>
    <ItemsControl ItemsSource="{Binding CustomerSymbols}"/>
</MenuItem>

C#

// 初始化类时填充CustomerSymbols
private void LoadCustomerSymbols()
{
    List<string> files = Settings.CustomerFiles; // 字符串文件列表

    foreach(string file in files)
    { 
        MenuItem menuItem = new MenuItem();
        string fileName = Path.GetFileNameWithoutExtension(file);
        menuItem.Header = fileName;
        CustomerSymbols.Add(menuItem);
    }
}

效果对比

单个MenuItem选中效果
集合生成MenuItem的选中效果

解决方案

问题根源是你用了ItemsControl作为MenuItem的子容器——ItemsControl本身会被识别为一个菜单容器项,因此会出现整体选中和额外缩进。直接把集合绑定到目标MenuItem的ItemsSource即可解决。

修改步骤

  1. 调整XAML结构:移除嵌套的<ItemsControl>,将集合直接绑定到CustomerSymbols这个MenuItem的ItemsSource属性上:
<MenuItem 
    Name="Template" 
    Header="Startmall"/>
<MenuItem 
    Header="Symboler" 
    Name="CustomerSymbols"
    ItemsSource="{Binding CustomerSymbols}">
    <MenuItem Header="Test1"/>
    <MenuItem Header="Test2"/>
    <MenuItem Header="Test3"/>
</MenuItem>
  1. 优化C#代码(可选):如果你的CustomerSymbols是字符串集合类型,无需手动创建MenuItem,通过ItemTemplate自动生成即可:
  • 补充XAML的ItemTemplate:
<MenuItem.ItemTemplate>
    <DataTemplate>
        <MenuItem Header="{Binding}"/>
    </DataTemplate>
</MenuItem.ItemTemplate>
  • 简化C#代码:
private void LoadCustomerSymbols()
{
    List<string> files = Settings.CustomerFiles;
    CustomerSymbols = files.Select(file => Path.GetFileNameWithoutExtension(file)).ToList();
}

如果坚持手动创建MenuItem,只需确保CustomerSymbols是ObservableCollection<MenuItem>类型,直接绑定到MenuItem的ItemsSource即可,不需要嵌套ItemsControl。

修改后,集合生成的菜单项会和手动添加的Test1/Test2/Test3表现一致:鼠标悬停仅单个项显示选中状态,无额外缩进。


内容的提问来源于stack exchange,提问作者Fredrik Karlsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:11:37