다음을 통해 공유


UIElement.AddHandler(RoutedEvent, Object, Boolean) 메서드

정의

지정된 라우트된 이벤트에 대해 라우트된 이벤트 처리기를 추가하여 해당 처리기를 현재 요소의 처리기 컬렉션에 추가합니다. true 이벤트가 다른 곳에서 처리되더라도 제공된 처리기를 호출하도록 을 지정 handledEventsToo 합니다.

public:
 virtual void AddHandler(RoutedEvent ^ routedEvent, Platform::Object ^ handler, bool handledEventsToo) = AddHandler;
void AddHandler(RoutedEvent const& routedEvent, IInspectable const& handler, bool const& handledEventsToo);
public void AddHandler(RoutedEvent routedEvent, object handler, bool handledEventsToo);
function addHandler(routedEvent, handler, handledEventsToo)
Public Sub AddHandler (routedEvent As RoutedEvent, handler As Object, handledEventsToo As Boolean)

매개 변수

routedEvent
RoutedEvent

처리할 라우트된 이벤트의 식별자입니다.

handler
Object

Platform::Object

IInspectable

처리기 구현에 대한 참조입니다.

handledEventsToo
Boolean

bool

true 는 라우트된 이벤트가 해당 이벤트 데이터에서 처리된 것으로 표시된 경우에도 호출되도록 처리기를 등록합니다.

false 처리기를 라우트된 이벤트가 이미 처리된 것으로 표시된 경우 호출되지 않는 기본 조건으로 등록합니다. 기본값은 false입니다.

제어 구성을 위해 Windows 런타임 이벤트 시스템의 의도된 디자인을 방해하므로 라우트된 이벤트를 정기적으로 다시 처리하도록 요청하지 마세요.

예제

이 예제에서는 및 handledEventsTootrue를 로 사용하여 이벤트 처리기를 AddHandler 연결하기 위한 기본 구문을 보여줍니다. 이 경우 유선 중인 이벤트는 Tapped입니다. 일반적인 와이어 처리기 위치는 페이지에 대해 로드되거나 템플릿 컨트롤 의 경우 OnApplyTemplate 입니다.

void MainPage::pageRoot_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
{
     //implementation
}
void MainPage::pageRoot_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
     this->AddHandler(UIElement::TappedEvent, ref new TappedEventHandler(this, &MainPage::pageRoot_Tapped), true);
}
private void pageRoot_Tapped(object sender, TappedRoutedEventArgs e)
{
    //implementation
}
private void pageRoot_Loaded_1(object sender, RoutedEventArgs e)
{
    this.AddHandler(UIElement.TappedEvent, new TappedEventHandler(pageRoot_Tapped), true);
}

설명

일반적으로 배선 이벤트 처리기에 사용하는 언어별 구문에 대한 일반적인 대용품으로 사용하지 AddHandler 마세요. 모든 이벤트에 로 전달할 routedEvent수 있는 식별자가 있는 것은 아니므로 작동하지 않습니다. AddHandler는 라우트된 이벤트에 특히 적합하며 주로 로 true전달 handledEventsToo 하여 사용하도록 설정된 특정 시나리오를 위한 것입니다. 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하세요.

라우트된 이벤트 식별자

라우트된 이벤트 식별자는 일반적으로 UIElement의 정적 속성 멤버입니다. 예를 들어 KeyUp 이벤트에 대한 처리기를 추가하려면 이 매개 변수에 대해 KeyUpEvent 를 전달합니다. 소수의 Windows 런타임 이벤트에만 이 식별자가 있습니다. UIElement의 라우트된 이벤트만 이 사용에 사용할 수 있는 식별자 API가 있습니다. 일반적으로 포인터 수준, 제스처 수준, 조작 수준 등 다양한 수준의 입력 작업과 관련된 이벤트입니다. 또한 키 입력 이벤트를 이러한 방식으로 처리할 수 있습니다.

라우트된 이벤트 식별자를 노출하여 호출에 의해 등록된 처리기에서 처리할 수 있는 라우트된 AddHandler 이벤트 목록은 다음과 같습니다.

처리기 매개 변수

매개 변수는 handler 형식화되지 않은 매개 변수이지만 원하는 이벤트와 관련된 처리기 메서드를 참조하는 새 대리자를 제공해야 합니다. 예를 들어 KeyUp 이벤트를 처리하는 경우 해당 대리자 서명을 기반으로 KeyEventHandler 하는 메서드를 참조하는 새 KeyEventHandler instance 전달합니다. 이를 위해서는 역참조가 필요하며 역참조 구문은 사용 중인 언어에 따라 달라집니다. 이 항목의 예제를 참조하세요.

handledEventsToo를 사용하는 경우

실용적인 방식으로 하위 수준 입력 이벤트를 처리하는 것은 복잡한 작업입니다. 많은 컨트롤은 특정 이벤트가 처리된 것으로 표시되고 다른 보다 직관적인 이벤트로 대체되는 동작을 구현합니다. 일반적으로 컨트롤은 일부 디자인 의도가 있는 경우에만 라우트된 이벤트를 처리됨으로 표시합니다. 그러나 특정 시나리오에서 이러한 디자인 의도는 입력 이벤트의 특정 처리에 필요한 것이 아닐 수 있습니다. 처리기를 로 등록하는 것이 적절한 시나리오에 적합합니다 handledEventsTootrue . 그러나 당신은 일상적으로이 작업을 수행해서는 안됩니다. 처리된 경우에도 모든 이벤트에 대한 응답으로 처리기를 호출하면 자체 앱 이벤트 처리 논리가 복잡해집니다. 처리기 논리가 상당한 경우 성능이 저하될 수 있습니다. 특정 컨트롤이 앱 논리로 처리하려는 이벤트를 처리하고 있음을 발견한 경우에만 처리기를 이미 처리된 이벤트에 연결해야 합니다.

컨트롤의 클래스 처리 동작을 방지하는 또 다른 방법은 컨트롤이 이벤트를 처리된 것으로 표시하는 미리 구성된 재정의인 OnEvent 메서드를 제어하고 재정의하는 서브클래스입니다. 그러나 이 것 역시 복잡할 수 있습니다. 기본 구현은 이벤트를 처리된 것으로 표시하므로 기본 구현을 호출하지 않고 컨트롤의 처리 구현을 재현해야 할 수 있습니다. 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하세요.

적용 대상

추가 정보