본문 바로가기

Silverlight

마우스 휠 이벤트 잡기!


첨부한 cs파일은 인터넷에서 떠돌다가 찾아낸 겁니다.
출처는 기억이 나지 않습니다.

간단하게 사용법 올리겠습니다.

1. 첨부파일을 자신의 실버라이트 프로젝트에 추가합니다.

2. VS2008에서 본 파일을 열어 namespace를 자신의 프로젝트 명으로 변경합니다.

3. Page Class에 아래 추가

private MouseWheelHelper _mouseWheelHelper;

4. Page_Loaded 함수 안에 아래 이벤트 추가

_mouseWheelHelper = new MouseWheelHelper(this, "SilverlightControl");
_mouseWheelHelper.Moved += new EventHandler<MouseWheelEventArgs>(MouseWheelHelper_Moved);

5. Page Class에 아래 함수 추가하고 적당히 고쳐서 쓰시면 되겠습니다.

        private void MouseWheelHelper_Moved(object sender, MouseWheelEventArgs e)
        {
            if (e.Delta > 0) // 휠을 위로 스크롤
            {
                // 여기에 함수 호출
            }
            else // 휠을 아래로 스크롤
            {
                // 여기에 함수 호출
            }

            e.Handled = true;
        }


**********************************************************************************
* 첨부 파일에 샘플 예제 하나 챙겼습니다. ^^
**********************************************************************************

샘플프로젝트 Page.xaml.cs 파일에 적용 한 모습

휠 이벤트 사용을 위해 추가한 부분은 붉은 색으로 표시했습니다.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Interop;

namespace SampleWheel
{
    public partial class Page : Canvas
    {
        private MouseWheelHelper _mouseWheelHelper;
        private readonly double _dScaleStep = 0.1;
        private readonly double _dMinScale = 0.1;

        public void Page_Loaded(object o, EventArgs e)
        {
            // Required to initialize variables
            InitializeComponent();

            BrowserHost.Resize += new EventHandler(BrowserHost_Resize);

            _mouseWheelHelper = new MouseWheelHelper(this, "SilverlightControl");
            _mouseWheelHelper.Moved += new EventHandler<MouseWheelEventArgs>(MouseWheelHelper_Moved);
        }

        void BrowserHost_Resize(object sender, EventArgs e)
        {
            Width = BrowserHost.ActualWidth;
            Height = BrowserHost.ActualHeight;
            cvContent.SetValue(Canvas.LeftProperty, (Width - cvContent.Width) / 2);
            cvContent.SetValue(Canvas.TopProperty, (Height - cvContent.Height) / 2);
        }

        private void MouseWheelHelper_Moved(object sender, MouseWheelEventArgs e)
        {
            if (e.Delta > 0) // 휠을 위로 스크롤
            {
                // 여기에 함수 호출
                ScaleTF.ScaleX += _dScaleStep;
                ScaleTF.ScaleY += _dScaleStep;
            }
            else // 휠을 아래로 스크롤
            {
                // 여기에 함수 호출
                if ((ScaleTF.ScaleX - _dScaleStep) > _dMinScale) // 너무축소되어 사라지는 것을 방지
                {
                    ScaleTF.ScaleX -= _dScaleStep;
                    ScaleTF.ScaleY -= _dScaleStep;
                }
            }

            e.Handled = true;
        }
    }
}




[출처] 실버라이트 네이버 카페