扩展 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 }