다음을 통해 공유


UIElement.PointerExited 이벤트

정의

포인터가 이 요소의 적중 테스트 영역을 떠날 때 발생합니다.

public:
 virtual event PointerEventHandler ^ PointerExited;
// Register
event_token PointerExited(PointerEventHandler const& handler) const;

// Revoke with event_token
void PointerExited(event_token const* cookie) const;

// Revoke with event_revoker
UIElement::PointerExited_revoker PointerExited(auto_revoke_t, PointerEventHandler const& handler) const;
public event PointerEventHandler PointerExited;
function onPointerExited(eventArgs) { /* Your code */ }
uIElement.addEventListener("pointerexited", onPointerExited);
uIElement.removeEventListener("pointerexited", onPointerExited);
- or -
uIElement.onpointerexited = onPointerExited;
Public Custom Event PointerExited As PointerEventHandler 
<uiElement PointerExited="eventhandler"/>

이벤트 유형

설명

PointerExited 이벤트는 처음에 요소의 경계 영역에 있던 포인터에 대한 응답으로 해당 경계 영역을 떠나게 됩니다. 터치, 마우스 및 펜/스타일러스 상호 작용은 UWP 앱에서 포인터 입력으로 수신, 처리 및 관리됩니다. 이러한 디바이스 및 해당 상호 작용은 PointerExited 이벤트를 생성할 수 있습니다. 자세한 내용은 포인터 입력 처리 및 이 항목의 다른 설명을 참조하세요.

PointerEventHandler를 기반으로 하는 처리기를 사용하여 이 이벤트를 처리합니다.

터치 동작의 경우와 터치 동작의 결과인 조작 관련 또는 조작 이벤트의 경우에도 이벤트 원본이 되거나 터치 동작과 연관된 이벤트를 실행하려면 요소의 적중 횟수 테스트가 보여야 합니다. UIElement.Visibility표시되어야 합니다. 파생 형식의 다른 속성도 적중 테스트 표시 유형에 영향을 미칩니다. 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하세요.

PointerExited는 이벤트에 대한 이벤트 데이터가 처리됨으로 표시된 경우에도 호출될 경로에 이벤트 처리기를 연결하는 기능을 지원 합니다. AddHandler를 참조하세요.

특정 Windows 런타임 컨트롤에는 PointerExited 입력 이벤트에 대한 클래스 기반 처리가 있을 수 있습니다. 이 경우 컨트롤에 OnPointerExited 메서드에 대한 재정의가 있는 것일 수 있습니다. 일반적으로 이벤트는 클래스 처리기에 의해 처리된 것으로 표시되지 않으므로 UI의 컨트롤에 대한 사용자 코드에서 PointerExited 이벤트를 처리할 수 있습니다. 이벤트에 대한 클래스 기반 처리의 작동 방식에 대한 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하세요.

다른 요소가 포인터를 캡처한 경우 캡처된 포인터가 요소의 경계를 벗어나더라도 PointerExited가 실행되지 않습니다. 포인터 캡처에 대한 자세한 내용은 CapturePointer 또는 마우스 상호 작용을 참조하세요.

마우스 및 펜/스타일러스 입력에 대한 PointerExited

마우스 입력 장치에는 마우스 단추를 눌렀을 때 단추를 누르지 않더라도 마우스가 움직일 때마다 표시되는 화면 커서가 있습니다. 펜 디바이스 입력에도 비슷한 동작이 제공됩니다. 여기서 입력 디바이스는 스타일러스가 입력 장치 표면(IsInRange)을 마우스로 가리키지만 만지지 않는 것을 감지할 수 있습니다. 따라서 마우스 및 펜 디바이스 입력은 터치 이벤트와 약간 다른 경우에서 PointerExited 이벤트를 발생합니다. 자세한 내용은 마우스 조작을 참조하세요. 요소에 대한 마지막 PointerMoved 이벤트가 발생한 후 PointerExited 이벤트가 발생합니다.

터치 입력에 대한 PointerExited

터치 포인트는 손가락이 표면에 닿는 경우에만 감지할 수 있습니다. 터치 동작으로 인해 PointerReleased 이벤트가 발생할 때마다 해당 이벤트 바로 뒤에 PointerExited 이벤트가 발생하며, 모든 이벤트 데이터는 두 이벤트에 대해 동일한 정보(동일한 포인터 ID, 동일한 위치 등)가 됩니다. 즉, 포인터는 현재 요소를 입력하고 요소가 터치 포인트에 의해 터치되는 위치로 간주됩니다.

또는 터치 포인트는 포인터가 이동할 때 표면과 지속적으로 접촉하고, 처음에 요소를 초과한 다음, 요소의 적중 테스트 범위를 종료하는 경우 PointerExited를 생성합니다. 이러한 종류의 터치 작업의 경우 포인터 이벤트가 아닌 조작 또는 제스처로 작업을 처리할 수도 있습니다. 자세한 내용은 포인터 입력 처리를 참조하세요.

PointerExited에 대한 라우트된 이벤트 동작

PointerExited는 라우트된 이벤트입니다. 라우트된 이벤트 개념에 대한 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하세요. 부모-자식 관계에 있는 요소를 포함하여 XAML UI의 요소에 대해 여러 PointerExited 이벤트를 정의할 수 있습니다. 일반적인 UI 컴퍼지션에서 자식 요소는 부모 요소의 범위 내에 있으므로 포인터가 자식에서 이동할 때 자식에 대해 PointerExited 이벤트가 먼저 발생하고 포인터가 부모에서 완전히 이동할 때 부모에 대해 발생합니다. PointerExited 이벤트는 일반적으로 자식 요소가 실행될 때 부모에 버블되지 않습니다. 입력 시스템에서 PointerExited 이벤트 발생을 부모로 라우팅하는 것이 혼란스러울 수 있기 때문입니다. 일반적으로 PointerExited 이벤트가 라우팅되지 않도록 하려면 보낸 사람에서만 처리하려고 합니다. 처리기에서 Handledtrue 로 설정하여 이벤트 라우팅을 명시적으로 방지할 수 있습니다.

드문 경우이지만 부모에 대한 PointerExited 이벤트 거품을 볼 수 있습니다. 예를 들어 RenderTransform 을 사용하여 부모 범위를 벗어난 자식 요소를 오프셋한 경우 자식 요소가 종료될 때 이벤트가 부모에 버블을 만들고 자식 요소가 이벤트를 발생시킨 방법에 의해 보고된 이벤트 정보를 제공합니다.

포인터 컨트롤에 대한 시각적 상태

컨트롤 템플릿이 있는 컨트롤은 포인터가 컨트롤의 경계를 넘을 때만 활성 상태인 시각적 상태를 적용할 수 있습니다. 이 동작을 얻거나 변경하기 위해 PointerEntered 또는 PointerExited를 항상 처리할 필요는 없습니다. 컨트롤의 템플릿을 다시 지정해야 할 수 있습니다. 시각적 상태를 호출하는 하위 수준 입력 처리가 이미 있는 기존 컨트롤에서 파생하는 경우 " CommonStates" VisualStateGroup에서 "PointerOver"라는 시각적 상태를 제공해야 하며, 기본 제공 컨트롤 논리는 포인터가 컨트롤 위에 있을 때마다 해당 시각적 상태를 로드합니다. 포인터 오버에 대한 시각적 상태는 Button 또는 ListViewItem과 같이 호출하거나 선택할 수 있는 컨트롤에 있는 경우가 많습니다. 시각적 상태를 호출하는 기본 제공 입력 이벤트 처리가 없는 Control 과 같은 기본 클래스에서 파생하는 경우 이 동작을 얻으려면 OnPointerEnteredOnPointerExited 를 재정의해야 할 수 있습니다. OnPointerExited를 사용하여 GoToState를 호출하여 "PointerOver" 상태 이외의 상태(예: "Normal")를 로드합니다. 자세한 내용은 시각적 상태에 대한 스토리보드 애니메이션을 참조하세요.

Windows 8 동작

Windows 8의 경우 일반적으로 화면 커서(또는 스타일러스 또는 터치포인트)가 실제로 이동하지 않으면 PointerEntered 이벤트가 발생하지 않습니다. 예를 들어 마우스와 화면 커서가 고정된 상태로 유지되고 PointerEntered 처리기가 있는 개체의 위치가 화면 커서 아래로 이동하도록 변환되거나 조정 된 경우 PointerEntered 가 실행되지 않습니다. 또는 Popup 또는 플라이아웃과 같은 요소가 사라지고 포인터가 새 요소 위에 있는 경우 PointerEntered 가 실행되지 않습니다(하지만 포인터는 아직 이동하지 않음). 이와 관련된 것은 PointerExited 동작입니다. 예를 들어 팝업이 프로그래밍 방식으로 해제되는 경우 포인터가 해제의 원인으로 이동하지 않으면 PointerExited가 발생하지 않습니다. 포인터가 새로 표시된 요소 위로 이동하는 경우에도 PointerEntered 이벤트가 발생하지만, 이는 해제 시점이 아니라 이동 시 발생하는지 여부는 사용자에게 달려 있습니다. 즉, 앱 UI에서 포인터 상태 결정에 PointerEntered 를 실행한 마지막 요소를 사용하려고 하는 것은 Windows 8에서 포괄적이지 않으며 PointerEntered 및 PointerExited 가 페어링되지 않는 많은 시나리오가 있습니다. 이는 PointerEntered 및 PointerExited 를 트리거로 사용하는 컨트롤의 시각적 상태에도 영향을 줍니다.

Windows 8.1 시작하여 포인터가 한 번에 PointerEntered 이벤트를 발생시킨 모든 경우에 대해 PointerExited가 발생하지만 포인터가 해당 요소 내에 더 이상 없는 경우 일부 UI 상태 변경이 발생합니다. 여기에는 전체 요소가 사라지는 경우가 포함됩니다. 이전 요소가 사라졌기 때문에 포인터가 다른 요소 위에 있는 경우 포인터가 이동하지 않더라도 해당 요소는 PointerEntered를 발생합니다. 표시 유형을 프로그래밍 방식으로 Collapsed로 설정하는 요소는 요소가 UI에서 사라질 수 있는 한 가지 방법이며, Windows 8.1 동작은 이를 고려하며 Collapsed 요소에 대해 PointerExited를 실행하고 새로 표시된 요소에 대해 PointerEntered를 실행합니다.

앱 코드를 Windows 8에서 Windows 8.1 마이그레이션하는 경우 이전에 실행되지 않은 경우 PointerExited 및 PointerEntered가 발생하므로 이 동작 변경을 고려할 수 있습니다.

Windows 8용으로 컴파일되었지만 Windows 8.1에서 실행하는 앱은 Windows 8 동작을 계속 사용합니다.

적용 대상

추가 정보