WPF 는 서로 배척 하고 그룹 을 나 누 는 RadioButton 식 단일 선택 메뉴 를 지원 합 니 다.

원문 은 po 가 stackoverflow 에 있 는 것 으로 벽 에 저장 되 어 있 습 니 다.
stackoverflow 의 링크: http://stackoverflow.com/a/35692688/5972372
이 문제 아래 에 또 다른 해결 방안 이 있 으 니 볼 수 있 지만, 나 는 여전히 이런 실현 방식 을 좋아 하고, 간단 하고 깨끗 하 다.
    public class RadioMenuItem : MenuItem
    {
        public string GroupName { get; set; }
        protected override void OnClick()
        {
            var c = Parent as ItemsControl;
            if (null != c)
            {
                var rmi = c.Items.OfType<RadioMenuItem>().FirstOrDefault(i => i.GroupName == GroupName && i.IsChecked);
                if (null != rmi) rmi.IsChecked = false;

                IsChecked = true;
            }
            base.OnClick();
        }
        private static readonly Geometry RadioDot = Geometry.Parse("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");
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            var p = GetTemplateChild("Glyph") as Path;
            if (null == p) return;
            //var x = p.Width/2;
            //var y = p.Height/2;
            //var r = Math.Min(x, y) - 1;
            //var e = new EllipseGeometry(new Point(x,y), r, r);
            //p.Data = e.GetFlattenedPathGeometry();
            p.Data = RadioDot;
        }
        private new bool IsCheckable { get; } = false;
    }

좋은 웹페이지 즐겨찾기