PointerPressed 이벤트
TOC
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장

UIElement.PointerPressed Event

포인터 장치가 이 요소 내에서 Press 작업을 초기화하면 발생합니다.

구문


public event PointerEventHandler PointerPressed


<uiElement PointerPressed="eventhandler"/>

이벤트 정보

대리자 PointerEventHandler

설명

Windows 스토어 앱에서 터치, 마우스 및 펜/스타일러스 상호 작용은 포인터 입력으로 수신, 처리 및 관리됩니다. 이러한 상호 작용에 따라 PointerPressed 이벤트가 생성될 수 있습니다. 자세한 내용은 빠른 시작: 포인터를 참조하십시오. 포인터 이벤트는 여러 포인터 및 해당 관계에 관심이 있는 경우 또는 정확한 좌표 위치와 같은 각 포인터의 세부 사항을 검사할 경우와 같은 시나리오에서 사용됩니다. 그렇지 않으면 Tapped 등의 제스처 이벤트를 처리하는 것이 좋습니다.

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

마우스 입력은 마우스 입력이 처음 감지되었을 때 할당된 단일 포인터와 연결됩니다. 마우스 단추(왼쪽, 휠 또는 오른쪽)를 클릭하면 PointerPressed 이벤트를 통해 포인터와 해당 단추 간의 보조 연결을 만듭니다. 동일한 마우스 단추를 놓을 때(이 이벤트가 완료될 때까지 다른 단추는 이 포인터와 연결될 수 없는 경우)에만 PointerReleased 이벤트가 발생합니다. 이 단독 연결 때문에 다른 마우스 단추 클릭은 PointerMoved 이벤트를 통해 라우팅됩니다. 다음 예제와 같이 이 이벤트를 처리할 때 마우스 단추 상태를 테스트할 수 있습니다.


private void Target_PointerMoved(object sender, PointerRoutedEventArgs e)
{
    Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;

    // Multiple, simultaneous mouse button inputs are processed here.
    // Mouse input is associated with a single pointer assigned when 
    // mouse input is first detected. 
    // Clicking additional mouse buttons (left, wheel, or right) during 
    // the interaction creates secondary associations between those buttons 
    // and the pointer through the pointer pressed event. 
    // The pointer released event is fired only when the last mouse button 
    // associated with the interaction (not necessarily the initial button) 
    // is released. 
    // Because of this exclusive association, other mouse button clicks are 
    // routed through the pointer move event.          
    if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
    {
        // To get mouse state, we need extended pointer details.
        // We get the pointer info through the getCurrentPoint method
        // of the event argument. 
        Windows.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint(Target);
        if (ptrPt.Properties.IsLeftButtonPressed)
        {
            eventLog.Text += "\nLeft button: " + ptrPt.PointerId;
        }
        if (ptrPt.Properties.IsMiddleButtonPressed)
        {
            eventLog.Text += "\nWheel button: " + ptrPt.PointerId;
        }
        if (ptrPt.Properties.IsRightButtonPressed)
        {
            eventLog.Text += "\nRight button: " + ptrPt.PointerId;
        }
    }

    // Prevent most handlers along the event route from handling the same event again.
    e.Handled = true;

    // Display pointer details.
    updateInfoPop(e);
}


마우스 입력 장치로부터의 포인터 이벤트는 일반적으로 해당 앱의 수명 주기 내내 이벤트 세부 정보에서 동일한 PointerId를 갖습니다.

PointerPressed는 라우트된 이벤트입니다. 라우트된 이벤트 개념에 대한 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조하십시오.

터치 작업의 경우와 터치 작업 결과로 발생하는 상호 작용별 또는 조작 이벤트의 경우, 이벤트 소스가 되도록 하려면 보이는 요소를 적중 테스트하고 작업과 연결된 이벤트를 발생시켜야 합니다. UIElement.VisibilityVisible이어야 합니다. 파생 형식의 다른 속성은 적중 테스트 표시 유형에도 영향을 줍니다. 자세한 내용은 적중 테스트 및 입력 이벤트를 참조하십시오.

PointerPressed는 이벤트에 대한 이벤트 데이터가 Handled로 표시된 경우에도 이벤트 처리기를 호출 경로에 연결할 수 있도록 합니다. AddHandler를 참조하십시오.

특정 Windows 런타임 컨트롤에는 PointerPressed 입력 이벤트에 대한 클래스 기반 처리가 있을 수 있습니다. 그렇다면 컨트롤에는 OnPointerPressed 메서드에 대한 재정의가 있을 수 있습니다. 일반적으로 이벤트는 클래스 처리기에 의해 처리됨으로 표시되고 PointerPressed 이벤트는 해당 컨트롤에서 사용자 코드 처리기에 의해 처리되는 경우 발생하지 않습니다. 예를 들어 ButtonBasePointerPressed를 처리하고 Click을 발생시키는 클래스를 가지고 있습니다. 이벤트의 클래스 기반 처리가 작동하는 방법에 대한 자세한 내용은 컨트롤의 입력 이벤트 처리기를 참조하십시오.

컨트롤에는 이벤트와 독립적으로 실행되는 PointerDownThemeAnimation 특성 애니메이션도 있을 수 있습니다.

포인터 캡처

PointerPressed는 포인터를 캡처할 때 시작 이벤트로 종종 사용되어, 해당 포인터가 내리기 상태로 유지되는 한 추가 포인터 관련 이벤트가 모두 특정 요소에 의해 캡처됩니다. 포인터를 캡처하려면 캡처를 유지해야 하는 특정 UI 요소에서 CapturePointer 메서드를 호출합니다. 일반적으로 PointerPressed 이벤트 처리기 내에서 수행되며, 이벤트의 sender에서 CapturePointer를 호출합니다. 포인터를 캡처하는 방법 및 캡처해야 하는 이유에 대한 자세한 내용은 CapturePointer를 참조하십시오.

PointerPressed 및 제스처 이벤트 또는 조작 이벤트

처음에 PointerPressed 이벤트를 발생시키는 사용자 작업은 입력 장치가 마우스인 경우를 제외하고 궁극적으로 Hold 제스처를 나타내는 Holding 이벤트를 발생시킬 수 있습니다. PointerPressed가 발생하는 요소에 기본값이 아닌 ManipulationMode 값이 있는 경우 ManipulationStarted와 같은 다양한 조작 이벤트도 발생할 수 있습니다. 자세한 내용은 빠른 시작: 터치식 입력의 "조작 이벤트 사용" 섹션을 참조하십시오.

PointerPressed가 발생할 때 Tapped 등의 제스처 이벤트는 발생하지 않습니다. Holding 이외의 제스처 이벤트는 이벤트를 발생시키기 전에 포인트가 해제되기를 기다리기 때문입니다.

앱의 사용자 상호 작용에 대한 일반 디자인 규칙으로 상호 작용을 처리할 수 있는 컨트롤 관련 이벤트 또는 적절한 제스처 이벤트가 있는지 여부를 확인해야 합니다. 예를 들어 컨트롤이 Button이고 컨트롤에는 특별히 사용자가 단추의 동작을 호출할 때를 위한 Click 이벤트가 포함됩니다. 또는 요소가 단추가 아니더라도 요소의 기본 작업에 대한 이벤트를 처리하는 경우에는 Tapped를 처리해야 합니다.

IsTapEnabled 등의 속성을 설정하여 개별 요소에서 구체적으로 제스처 이벤트를 사용하지 않도록 설정할 수 있습니다. 조작을 처리 중인 경우 제스처 이벤트를 사용하지 않도록 설정할 수도 있지만, 일반적으로 포인터 이벤트를 처리 중인 경우 제스처 이벤트를 사용하지 않도록 설정할 필요가 없습니다. 포인터 이벤트를 구체적으로 사용하지 않도록 설정할 수는 없지만 처리하지 않도록 선택할 수 있습니다.

PointerPressed 및 PointerReleased

PointerReleased 대신 다른 이벤트가 작업의 끝에서 발생할 수 있습니다(예: PointerCanceled 또는 PointerCaptureLost).— 항상 쌍으로 발생하는 PointerPressedPointerReleased 이벤트는 사용하지 마십시오. 제대로 작동하려면 앱은 Press 작업에 대한 결론을 나타내는 모든 이벤트를 수신 대기하고 처리해야 합니다. PointerReleased 항목을 가져올 수 없는 주된 이유는 다음과 같습니다.

  • 특정 하드웨어가 터치 동작 및 Press 동작을 처리하는 방식의 차이
  • 다른 포인터로부터 프로그래밍 방식으로 포인터 캡처
  • 해상도나 모니터 설정 변경 같은 표시 영역의 관계를 변경하는 사용자 작업
  • 이전 터치 작업과 동일한 표면을 처리하는 스타일러스와 같은 입력 상호 작용

요구 사항

지원되는 최소 클라이언트

Windows 8

지원되는 최소 서버

Windows Server 2012

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadata

Windows.winmd

참고 항목

UIElement
Tapped
PointerReleased
빠른 시작: 터치 입력
XAML 사용자 입력 이벤트 샘플

 

 

표시:
© 2017 Microsoft