본문 바로가기

C#

[WPF] UserControl 에서 간단 마우스,키보드 이벤트 수신법


지울 필요가 없거나 충분히 on off 를 조절 하여 사용할 수 있는 환경이라면 구지 XAML 이나 += 로 추가 하지 않아도 아래와 같은 방법으로 override 하여 사용하면 깔끔하다.


 

        protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            base.OnMouseDown(e);
            this.Focus();

            Console.WriteLine("req focus");
        }

        protected override void OnMouseEnter(MouseEventArgs e)
        {
            ((SolidColorBrush)(_circle.Fill)).Color = OverColor;
        }

        protected override void OnMouseLeave(MouseEventArgs e)
        {
            ((SolidColorBrush)(_circle.Fill)).Color = NormalColor;
        }


        protected override void OnPreviewKeyDown(KeyEventArgs e)
        {
            base.OnPreviewKeyDown(e);
            Keyboard_Press_ArrowType key_type = Keyboard_Press_ArrowType.NONE;
            if (e.Key == Key.OemComma)
            {
                key_type = Keyboard_Press_ArrowType.LEFT;
            }
            else if (e.Key == Key.OemPeriod)
            {
                key_type = Keyboard_Press_ArrowType.RIGHT;
            }

            if (key_type != Keyboard_Press_ArrowType.NONE)
            {
                if (KeyboardPressEvent != null)
                {
                    KeyboardPressEvent(this, new SNCircleThumbEvent() { keyPressType = key_type });
                }
            }
        }