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

如何在WPF ComboBox中添加不可点击的分组标题?

在WPF ComboBox中添加不可点击的分组标题

要实现你要的效果,咱们可以通过数据分组+自定义分组样式来搞定,具体步骤如下:

1. 准备带分组结构的数据源

首先,你需要把原来的零散数值整理成带分组信息的结构,比如创建一个简单的模型类:

public class GameZoneItem
{
    // 分组名称(对应Liste 1、Liste 2)
    public string GroupName { get; set; }
    // 原来的区域数值
    public short ZoneNumber { get; set; }
}

然后在你的ViewModel或者后台代码里初始化数据:

// 构造分组数据
var zoneItems = new List<GameZoneItem>
{
    new GameZoneItem { GroupName = "Liste 1", ZoneNumber = 501 },
    new GameZoneItem { GroupName = "Liste 1", ZoneNumber = 301 },
    new GameZoneItem { GroupName = "Liste 2", ZoneNumber = 11 },
    // 可以继续添加更多分组和数值
};

// 创建CollectionViewSource来实现分组
var viewSource = new CollectionViewSource { Source = zoneItems };
viewSource.GroupDescriptions.Add(new PropertyGroupDescription(nameof(GameZoneItem.GroupName)));

// 绑定到ComboBox的ItemsSource
ComboBoxTypeJeu.ItemsSource = viewSource.View;

2. 修改XAML中的ComboBox配置

把原来硬编码的<sys:Int16>项删掉,替换成分组样式配置,同时保留你原来的绑定、事件和样式属性:

<ComboBox x:Name="ComboBoxTypeJeu" 
          HorizontalAlignment="Left" 
          Margin="297,151,0,0" 
          VerticalAlignment="Top" 
          Width="146" 
          FontSize="20" 
          FontFamily="Klavika Bd"
          <!-- 用SelectedValue绑定原来的Int16类型属性,指定取值路径 -->
          SelectedValue="{Binding NumberOfZones, Mode=TwoWay}"
          SelectedValuePath="ZoneNumber"
          SelectionChanged="ComboBoxTypeJeu_SelectionChanged">

    <!-- 自定义分组标题样式,设置不可点击 -->
    <ComboBox.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" 
                               FontWeight="Bold" 
                               Foreground="#FF666666"
                               <!-- 核心设置:让分组头不响应鼠标和键盘交互 -->
                               IsHitTestVisible="False"
                               Focusable="False"/>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ComboBox.GroupStyle>
</ComboBox>

关键说明

  • IsHitTestVisible="False" 会让分组标题完全不响应鼠标点击,Focusable="False" 避免键盘焦点移动到分组头上,确保它完全不可交互。
  • 因为你原来的NumberOfZones是Int16类型,所以用SelectedValue+SelectedValuePath来绑定,这样就能和原来的ViewModel属性完美匹配,不需要修改原有绑定逻辑。
  • 如果偏好纯XAML方式,也可以把CollectionViewSource定义为窗口资源,再绑定到ComboBox,效果是一样的。

内容的提问来源于stack exchange,提问作者Zak Koli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:17:55