UIElement.PointerEntered 이벤트
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
포인터가 이 요소의 적중 테스트 영역에 들어갈 때 발생합니다.
public:
virtual event PointerEventHandler ^ PointerEntered;
// Register
event_token PointerEntered(PointerEventHandler const& handler) const;
// Revoke with event_token
void PointerEntered(event_token const* cookie) const;
// Revoke with event_revoker
UIElement::PointerEntered_revoker PointerEntered(auto_revoke_t, PointerEventHandler const& handler) const;
public event PointerEventHandler PointerEntered;
function onPointerEntered(eventArgs) { /* Your code */ }
uIElement.addEventListener("pointerentered", onPointerEntered);
uIElement.removeEventListener("pointerentered", onPointerEntered);
- or -
uIElement.onpointerentered = onPointerEntered;
Public Custom Event PointerEntered As PointerEventHandler
<uiElement PointerEntered="eventhandler"/>
이벤트 유형
설명
PointerEntered 이벤트는 요소의 경계 영역으로 이동하는 포인터에 대한 응답으로 실행됩니다. 터치, 마우스 및 펜/스타일러스 상호 작용은 UWP 앱에서 포인터 입력으로 수신, 처리 및 관리됩니다. 이러한 디바이스와 해당 상호 작용은 PointerEntered 이벤트를 생성할 수 있습니다. 자세한 내용은 포인터 입력 처리 및 이 항목의 다른 설명도 참조하세요.
PointerEntered는 라우트된 이벤트입니다. 라우트된 이벤트 개념에 대한 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하세요.
PointerEventHandler를 기반으로 하는 처리기를 사용하여 이 이벤트를 처리합니다.
터치 동작의 경우와 터치 동작의 결과인 조작 관련 또는 조작 이벤트의 경우에도 이벤트 원본이 되거나 터치 동작과 연관된 이벤트를 실행하려면 요소의 적중 횟수 테스트가 보여야 합니다. UIElement.Visibility 는 표시되어야 합니다. 파생 형식의 다른 속성도 적중 테스트 표시 유형에 영향을 미칩니다. 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하세요.
PointerEntered는 이벤트에 대한 이벤트 데이터가 처리됨으로 표시된 경우에도 호출될 경로에 이벤트 처리기를 연결하는 기능을 지원 합니다. AddHandler를 참조하세요.
특정 Windows 런타임 컨트롤에는 PointerEntered 입력 이벤트에 대한 클래스 기반 처리가 있을 수 있습니다. 이 경우 컨트롤에 OnPointerEntered 메서드에 대한 재정의가 있는 것일 수 있습니다. 일반적으로 이벤트는 클래스 처리기에 의해 처리된 것으로 표시되지 않으므로 UI의 컨트롤에 대한 사용자 코드에서 PointerEntered 이벤트를 처리할 수 있습니다. 이벤트에 대한 클래스 기반 처리의 작동 방식에 대한 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하세요.
마우스 및 펜/스타일러스 입력에 대한 PointerEntered
마우스 입력 장치에는 마우스 단추를 눌렀을 때 단추를 누르지 않더라도 마우스가 움직일 때마다 표시되는 화면 커서가 있습니다. PointerEntered 이벤트는 요소가 발생시킨 첫 번째 PointerMoved 이벤트 앞에 섰습니다. 펜 디바이스 입력에도 비슷한 동작이 제공됩니다. 여기서 입력 디바이스는 스타일러스가 입력 장치 표면(IsInRange)을 마우스로 가리키지만 만지지 않는 것을 감지할 수 있습니다. 따라서 마우스 및 펜 장치 입력은 터치 이벤트와 약간 다른 경우에 PointerEntered 이벤트를 발생합니다. 자세한 내용은 마우스 조작을 참조하세요.
터치 입력에 대한 PointerEntered
터치 포인트는 손가락이 표면에 닿는 경우에만 감지할 수 있습니다. 터치 동작으로 인해 PointerPressed 이벤트가 발생할 때마다 해당 이벤트는 PointerEntered 이벤트 바로 앞에 옵니다. 모든 이벤트 데이터는 두 이벤트(동일한 포인터 ID, 동일한 위치 등)에 대해 동일한 정보입니다. 즉, 포인터는 현재 요소를 입력하고 요소가 터치 포인트에 의해 터치되는 위치로 간주됩니다.
또는 포인터가 이동할 때 표면과 지속적으로 접촉하고 요소의 적중 테스트 범위에 들어가면 터치 포인트가 PointerEntered를 생성합니다. 이러한 종류의 터치 작업의 경우 포인터 이벤트가 아닌 조작 또는 제스처로 작업을 처리할 수도 있습니다. 자세한 내용은 포인터 입력 처리를 참조하세요.
PointerEntered에 대한 라우트된 이벤트 동작
PointerEntered는 라우트된 이벤트입니다. 라우트된 이벤트 개념에 대한 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하세요. 부모-자식 관계에 있는 요소를 포함하여 XAML UI의 요소에 대해 여러 PointerEntered 이벤트를 정의할 수 있습니다. 일반적인 UI 컴퍼지션에서 자식 요소는 부모 요소의 범위 내에 있으므로 포인터가 부모로 이동할 때 먼저 부모에 대해 PointerEntered 이벤트가 발생하고 포인터가 이동할 때 자식에 대해 발생합니다. PointerEntered 이벤트는 일반적으로 자식 요소가 발생할 때 부모에 버블링되지 않습니다. 개념적으로 포인터가 이미 부모 범위 내에 있기 때문에 입력 시스템에서 PointerEntered 이벤트 발생을 부모로 라우팅하는 것이 혼동되기 때문입니다. 일반적으로 PointerEntered 이벤트가 라우팅되지 않도록 하려면 보낸 사람에서만 처리하려고 합니다. 처리기에서 Handled 를 true 로 설정하여 이벤트 라우팅을 명시적으로 방지할 수 있습니다.
드문 경우이지만 부모에 대한 PointerEntered 이벤트 거품이 표시될 수 있습니다. 예를 들어 RenderTransform 을 사용하여 부모 범위를 벗어난 자식 요소를 오프셋한 경우 자식 요소가 입력될 때 이벤트가 부모에 버블을 만들고 자식 요소가 이벤트를 발생시킨 방법에 의해 보고된 이벤트 정보를 제공합니다.
포인터 캡처
다른 요소가 포인터를 캡처한 경우 캡처된 포인터가 요소의 경계에 들어가더라도 PointerEntered가 실행되지 않습니다. 그러나 포인터가 요소 위에 있는 동안 포인터 캡처가 해제되면 PointerEntered가 실행되고 포인터가 이 경우 고정된 상태로 남아 있을 수도 있다고 생각됩니다. 이벤트 데이터의 GetCurrentPoint 값은 캡처가 해제되었을 때 포인터가 이미 요소 위에 있었기 때문에 가장자리의 점이 아닌 요소 가운데에 있는 점일 수 있습니다. 포인터 캡처에 대한 자세한 내용은 CapturePointer 또는 마우스 상호 작용을 참조하세요.
포인터 컨트롤에 대한 시각적 상태
컨트롤 템플릿이 있는 컨트롤은 포인터가 컨트롤의 경계를 넘을 때만 활성 상태인 시각적 상태를 적용할 수 있습니다. 이 동작을 얻거나 변경하기 위해 PointerEntered 또는 PointerExited 를 항상 처리할 필요는 없습니다. 컨트롤의 템플릿을 다시 지정해야 할 수 있습니다. 시각적 상태를 호출하는 하위 수준 입력 처리가 이미 있는 기존 컨트롤에서 파생하는 경우 " CommonStates" VisualStateGroup에서 "PointerOver"라는 시각적 상태를 제공해야 하며, 기본 제공 컨트롤 논리는 포인터가 컨트롤 위에 있을 때마다 해당 시각적 상태를 로드합니다. 포인터 오버에 대한 시각적 상태는 Button 또는 ListViewItem과 같이 호출하거나 선택할 수 있는 컨트롤에 있는 경우가 많습니다. 시각적 상태를 호출하는 기본 제공 입력 이벤트 처리가 없는 Control 과 같은 기본 클래스에서 파생하는 경우 이 동작을 얻으려면 OnPointerEntered 및 OnPointerExited 를 재정의해야 할 수 있습니다. 자세한 내용은 시각적 상태에 대한 스토리보드 애니메이션을 참조하세요.
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 동작을 계속 사용합니다.