유저컨트롤을 만들거나, 커스텀 컨트롤을 만들어서 사용할 때, 이벤트를 직접 만들어서 사용하고자 하는 경우가 있다. 직접 Routed Event를 만드는 방법을 알아보자.

Routed Event에 대한 개념은 이전 포스팅에 간단히 포함되어 있다.


방법은 간단하다.

1. 원하는 이벤트를 생성하고
2. 생성한 이벤트를 등록하고
3. 해당 이벤트를 원하는 시점에 발생

시켜주면 된다.

MSDN의 예제 코드를 통해 살펴보자.

public class MyButtonSimple: Button
{
    // Create a custom routed event by first registering a RoutedEventID
    // This event uses the bubbling routing strategy
    public static readonly RoutedEvent TapEvent = EventManager.RegisterRoutedEvent(
        "Tap", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButtonSimple));

    // Provide CLR accessors for the event
    public event RoutedEventHandler Tap
    {
            add { AddHandler(TapEvent, value); } 
            remove { RemoveHandler(TapEvent, value); }
    }

    // This method raises the Tap event
    void RaiseTapEvent()
    {
            RoutedEventArgs newEventArgs = new RoutedEventArgs(MyButtonSimple.TapEvent);
            RaiseEvent(newEventArgs);
    }
    // For demonstration purposes we raise the event when the MyButtonSimple is clicked
    protected override void OnClick()
    {
        RaiseTapEvent();
    }
 
}
public static readonly ~ 부분에서 RegisterRoutedEvent 메서드를 통해 RoutedEvent를 등록한다. 이벤트의 이름은 Tap 이고 라우팅전략은 Bubble 이다. 이 후의 두 인수는 RoutedEventHandler, 이벤트를 소유하는 클래스의 타입이다.


다음 부분에서 이벤트를 생성해주고, 

RaiseTapEvent()라는 함수를 만들어 원하는 시점에 이 함수를 호출하여 이벤트를 발생시키도록 한다.

이벤트를 만들었다면 해당 메서드에서 MyButtonSimple.TapEvent 부분만 수정하면 된다.


원하는 시점에 RaiseTapEvent() 함수를 호출하면 되는데, 위의 예제에서는 버튼이 클릭될 때 호출되도록 하였다.


위와 동일한 과정을 통해 이벤트를 만들고, 발생시켜 사용할 수 있다.



+ Recent posts