본문 바로가기

TechLog

OnManipulationStarted, OnManipulationDelta, OnManipulationCompleted 메서드

WP 실버라이트 앱을 만들면서 터치 입력을 처리할 수 있는 방법은 여러 가지가 있는데, button 등에 존재하는 Click 이벤트 대신에 터치의 시작/드래그/종료를 추적할 수 있는 방법으로 Manipulation 관련 이벤트를 사용하는 방법이 있다. OnManipulationStarted, OnManipulationDelta, OnManipulationCompleted 메서드는 각각 ManipulationStarted, ManipulationDelta, ManipulationCompleted 이벤트가 발생될 때 호출되는 메서드이며, 터치 입력의 시작/드래그/끝을 나타내는 이벤트를 핸들링한다.

이들 메서드는 UIElement 클래스에 가상 메서드로 정의되어 있다. 파생된 클래스에서 재정의하여 사용하도록 되어 있다. 다음 코드를 보자 :

 

protected override void OnManipulationStarted(ManipulationStartedEventArgs args)
{
    args.Complete();
    args.Handled = true;
    base.OnManipulationStarted(args);
}

 

위 코드처럼 OnManipulationStarted 메서드를 재정의하면 터치 입력을 처리할 수 있게 된다. (위 코드를 간단히 테스트해 보려면 Page 클래스에 추가하는 방법이 가장 간단할 것이다) ManipulationStartedEventArgs 타입 인자는 이벤트에 대한 정보를 담고 있는데, 이 인자의 값을 변경하여 이벤트의 처리 방식에 간섭하는 것이 가능하다.

인자의 Complete 메서드는 터치 입력을 완료시켜서 더 이상의 이벤트 발생을 막는 역할을 하는데, 이렇게 터치 입력이 완료되면 터치 드래그 및 완료에 해당하는 ManipulationDelta, ManipulationCompleted 이벤트가 발생하지 않게 된다.

Handled 프로퍼티는 터치 이벤트 처리를 상위 객체로 전달할 지 여부를 나타낸다. 이 값을 true로 지정하게 되면 ‘현재 클래스에서 ManipulationStarted 이벤트를 핸들링하겠다’는 의미가 되어, 부모 클래스에 ManipulationStarted 이벤트가 전달되지 않게 된다. 사용자가 만든 클래스에는 false 값이 지정된 채로 전달된다.