WPF 支持分组互斥的 RadioButton 式单选菜单

本文介绍了一种在WPF中实现同组互斥的RadioMenuItem的方法,通过扩展MenuItem类来达到选择时清除同组其他项的效果,并将默认的对勾符号替换为圆点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

扩展 MenuItem 为同组互斥的 RadioMenuItem,并且将对勾符号修改为圆点。

http://stackoverflow.com/a/35692688/5972372

这个问题下还有其他解决方案,可以看看,不过还是喜欢这种实现方式,简单干净。

 1 public class RadioMenuItem : MenuItem
 2 {
 3     public string GroupName { get; set; }
 4     protected override void OnClick()
 5     {
 6         var c = Parent as ItemsControl;
 7         if (null != c)
 8         {
 9             var rmi = c.Items.OfType<RadioMenuItem>().FirstOrDefault(i => i.GroupName == GroupName && i.IsChecked);
10             if (null != rmi) rmi.IsChecked = false;
11 
12             IsChecked = true;
13         }
14         base.OnClick();
15     }
16     private static readonly Geometry RadioDot = Geometry.Parse(
17         "M9,5.5L8.7,7.1 7.8,8.3 6.6,9.2L5,9.5L3.4,9.2 2.2,8.3 1.3,7.1L1,5.5L1.3,3.9 2.2,2.7 3.4,1.8L5,1.5L6.6,1.8 7.8,2.7 8.7,3.9L9,5.5z");
18     public override void OnApplyTemplate()
19     {
20         base.OnApplyTemplate();
21         var p = GetTemplateChild("Glyph") as Path;
22         if (null == p) return;
23         //var x = p.Width/2;
24         //var y = p.Height/2;
25         //var r = Math.Min(x, y) - 1;
26         //var e = new EllipseGeometry(new Point(x,y), r, r);
27         //p.Data = e.GetFlattenedPathGeometry();
28         p.Data = RadioDot;
29     }
30     private new bool IsCheckable { get; } = false;
31 }

 

转载于:https://www.cnblogs.com/qaqz111/p/6694456.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值