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

使用ItemSource时如何为MenuItem添加Tag属性?

实现MenuItem的Tag绑定到TblCategory的Id

嗨,这个需求很容易搞定,咱们只需要通过Menu.ItemContainerStyle给每个自动生成的MenuItem设置Tag属性的绑定就行,我给你两种实用的写法:

简洁版(保留原DisplayMemberPath)

如果你想继续用之前设置的DisplayMemberPath="Name"来显示菜单标题,只需要在ItemContainerStyle里加一个Tag的Setter就好:

<Menu ItemsSource="{Binding YourCategoryList}" DisplayMemberPath="Name">
    <Menu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <!-- 把Tag绑定到当前TblCategory对象的Id属性 -->
            <Setter Property="Tag" Value="{Binding Id}" />
        </Style>
    </Menu.ItemContainerStyle>
</Menu>

完整定制版(替代DisplayMemberPath)

如果之后你想给MenuItem加更多样式定制(比如字体、颜色),可以直接在Style里同时设置Header和Tag的绑定,替代DisplayMemberPath:

<Menu ItemsSource="{Binding YourCategoryList}">
    <Menu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Header" Value="{Binding Name}" />
            <Setter Property="Tag" Value="{Binding Id}" />
            <!-- 这里还可以加其他样式设置,比如字体大小 -->
            <Setter Property="FontSize" Value="14" />
        </Style>
    </Menu.ItemContainerStyle>
</Menu>

代码里获取Tag值

设置完成后,在MenuItem的点击事件或者其他逻辑里,你可以这样获取对应的Id:

private void CategoryMenuItem_Click(object sender, RoutedEventArgs e)
{
    if (sender is MenuItem targetItem && targetItem.Tag is int categoryId)
    {
        // 这里就可以使用categoryId进行后续操作啦
        Console.WriteLine($"选中的分类ID:{categoryId}");
    }
}

这个思路的核心就是利用ItemContainerStyle来为每个数据项对应的容器(MenuItem)设置属性绑定,因为Menu的ItemsSource绑定的是TblCategory列表,所以Style里的Binding上下文就是单个的TblCategory实例,直接绑定Id属性就可以了。

内容的提问来源于stack exchange,提问作者Marton Peintler Krivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:29:45