2008-11-10 5 views
7

두 개의 관련없는 컨트롤을 사용하여 동일한 사용자 지정 이벤트를 발생 시키려면 어떻게해야합니까? 지금까지 내가 본 모든 예제는 하나의 컨트롤 내에 이벤트가 정의되어 있으며, 다른 접근 방식을 취해야합니까?WPF 사용자 지정 라우팅 이벤트 질문

예 : 단추 및 텍스트 상자에 대한 OnFocus 처리기에서 사용자 지정 버블 링 이벤트를 발생시키고 싶습니다.

답변

8

먼저 질문을 통해 기존 UIElement.GotFocusEvent을 사용하고 싶지 않다는 것을 명확히 알 수는 없지만 그 사실을 알고 추후 사용하지 않을 이유가 있다고 가정합니다.

언제든지 정적 클래스에 사용자 지정 이벤트를 등록하고 원하는 위치로 올릴 수 있습니다. Keyboard class은 모든 이벤트 (예 : Keyboard.KeyDownEvent)로 처리됩니다.

public static class RoutedEventUtility 
{ 
    public static readonly RoutedEvent MyCustomEvent = EventManager.RegisterRoutedEvent("MyCustomEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(RoutedEventUtility)); 
} 

다른 RoutedEvent와 마찬가지로 이벤트를 발생시킵니다.

RoutedEventArgs args = new RoutedEventArgs(RoutedEventUtility.MyCustomEvent); 
RaiseEvent(args); 

다른 클래스가 공개 필드로 이벤트를 소유하게하려면 소유자를 추가해야합니다.

public class MyCustomControl : Control 
{ 
    public static readonly RoutedEvent MyCustomEvent = RoutedEventUtility.MyCustomEvent.AddOwner(typeof(MyCustomControl)); 
} 
+0

감사합니다. 죄송합니다. UIElement.GotFocusEvent에 대한 올바른 가정. – MJS