PointerRoutedEventArgs 클래스

PointerRoutedEventArgs Class

마지막 포인터 이벤트 메시지에서 반환한 인수를 포함합니다.

대부분의 경우, 선택한 Windows 8 언어 프레임워크(JavaScript로 작성된 Windows 스토어 앱, C++, C# 또는 Visual Basic으로 작성된 Windows 스토어 앱 또는 DirectX with C++로 작성된 Windows 스토어 앱)에서 포인터 이벤트 처리기의 이벤트 인수를 통해 포인터 정보를 얻는 것이 좋습니다.

이벤트 인수에서 본질적으로 해당 앱에 필요한 포인터 세부 정보를 노출하지 않는 경우 사용자는 PointerRoutedEventArgsGetCurrentPointGetIntermediatePoints 메서드를 통해 확장 포인터 데이터에 대한 액세스 권한을 가져올 수 있습니다. 이러한 메서드를 사용하여 포인터 데이터의 컨텍스트를 지정합니다.

정적 PointerPoint 메서드인 GetCurrentPointGetIntermediatePoints는 항상 앱의 컨텍스트를 사용합니다.

상속

Object
  RoutedEventArgs
    PointerRoutedEventArgs

구문


public sealed class PointerRoutedEventArgs : RoutedEventArgs

특성

[MarshalingBehavior(Agile)]
[Threading(Both)]
[Version(0x06020000)]
[WebHostHidden()]

멤버

PointerRoutedEventArgs클래스에는 다음과 같은 형식의 멤버가 있습니다.

메서드

The PointerRoutedEventArgs 클래스 - 이러한 메서드가 있습니다. 다음 위치의 메서드도 상속합니다. Object 클래스.

메서드Description
GetCurrentPoint Retrieves a PointerPoint object that provides basic info on the pointer associated with the event.
GetIntermediatePoints Retrieves a collection of PointerPoint objects that represent the pointer history from the last pointer event up to and including the current pointer event. Each PointerPoint in the collection provides basic info on the pointer associated with the event.

 

속성

PointerRoutedEventArgs클래스 - 이러한 속성이 있습니다.

속성사용 권한Description

Handled

읽기/쓰기Gets or sets a value that marks the routed event as handled, and prevents most handlers along the event route from handling the same event again.

KeyModifiers

읽기 전용Gets a value that indicates which key modifiers were active at the time that the pointer event was initiated.

OriginalSource

읽기 전용Gets a reference to the object that raised the event. (다음에서 상속됨 RoutedEventArgs)

Pointer

읽기 전용Gets a reference to a pointer token.

 

설명

이러한 이벤트에 대해 PointerRoutedEventArgs 이벤트 데이터 클래스가 사용됩니다.

중요   마우스 입력은 마우스 입력이 처음 감지되었을 때 할당된 단일 포인터와 연결됩니다. 마우스 단추(왼쪽, 휠 또는 오른쪽)를 클릭하면 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);
}


처리기와 관련이 있을 수 있는 데이터는 다음과 같습니다.

  • sender의 값입니다(이 이벤트 데이터 클래스가 아닌 대리자 서명에 있음).
  • KeyModifiers 또는 GetCurrentPoint와 같은 PointerRoutedEventArgs의 특정 멤버입니다.
  • Pointer 장치 설명 클래스의 값입니다. Pointer 속성에서 Pointer를 가져옵니다.
  • PointerPoint의 시스템 입력 개념에서 제공하는 멤버입니다. GetCurrentPoint API를 사용하여 PointerPoint 값을 가져온 다음 PositionPointerPointProperties 같은 PointerPoint API를 호출합니다.

흔히 특정 이벤트는 주로 해당 이벤트와 관련된 다양한 포인터 장치 및 포인터 포인트 클래스에서 사용할 수 있는 정보를 제공합니다. 예를 들어 PointerWheelChanged를 처리할 때 PointerPointPropertiesMouseWheelDelta에 관심이 있을 수 있습니다.

예제

다음 코드 예제에서는 입력 샘플의 시나리오 2를 보여 줍니다. 이 코드에서는 PointerPressed, PointerReleased, PointerEntered, PointerExitedPointerMoved 이벤트를 사용하여 직접 조작하기 위한 몇 가지 사용 패턴을 보여 줍니다.


<StackPanel x:Name="Scenario2Output" ManipulationMode="All">
  <StackPanel Orientation="Horizontal" Margin="0,10,0,0">
    <Button x:Name="scenario2Reset" Content="Reset" 
      Margin="0,0,10,0" Click="Scenario2Reset"/>
  </StackPanel>
  <StackPanel Orientation="Horizontal" >
    <ToggleSwitch x:Name="tbPointerCapture" 
      Header="Pointer Capture" FontSize="20"/>
    <TextBlock x:Name="txtCaptureStatus" 
      Style="{StaticResource BasicTextStyle}"/>
  </StackPanel>
  <Border x:Name="bEnteredExited" Background="Red" 
    Height="300" Width="450" CornerRadius="20" 
    HorizontalAlignment="Left">
    <Grid>
      <TextBlock Style="{StaticResource BasicTextStyle}" Text="" 
        HorizontalAlignment="Center" VerticalAlignment="Center" 
        x:Name="bEnteredExitedTextBlock"/>
      <Ellipse VerticalAlignment="Bottom" Stroke="Silver" 
        StrokeDashArray="2,2" StrokeThickness="2" Margin="2" 
        x:Name="bEnteredExitedTimer" Width="20" Height="20" 
        RenderTransformOrigin="0.5,0.5">
        <Ellipse.RenderTransform >
          <RotateTransform Angle="0" />
        </Ellipse.RenderTransform>
      </Ellipse>
    </Grid>
  </Border>
</StackPanel>



int _pointerCount;

public Scenario2()
{
    this.InitializeComponent();
    bEnteredExited.PointerEntered += bEnteredExited_PointerEntered;
    bEnteredExited.PointerExited += bEnteredExited_PointerExited;
    bEnteredExited.PointerPressed += bEnteredExited_PointerPressed;
    bEnteredExited.PointerReleased += bEnteredExited_PointerReleased;
    bEnteredExited.PointerMoved += bEnteredExited_PointerMoved;

    // To code for multiple Pointers (that is, fingers), 
    // we track how many entered/exited.
    _pointerCount = 0;
}

private void bEnteredExited_PointerMoved(object sender, 
    PointerRoutedEventArgs e)
{
    Scenario2UpdateVisuals(sender as Border, "Moved");
}

private void bEnteredExited_PointerReleased(object sender, 
    PointerRoutedEventArgs e)
{
    ((Border)sender).ReleasePointerCapture(e.Pointer);
    txtCaptureStatus.Text = string.Empty;
}

//Can only get capture on PointerPressed (i.e. touch down, mouse click, pen press)
private void bEnteredExited_PointerPressed(object sender, 
    PointerRoutedEventArgs e)
{
    if (tbPointerCapture.IsOn)
    {
        bool _hasCapture = ((Border)sender).CapturePointer(e.Pointer);
        txtCaptureStatus.Text = "Got Capture: " + _hasCapture;
    }
}

private void bEnteredExited_PointerExited(object sender, 
    PointerRoutedEventArgs e)
{
    _pointerCount--;
    Scenario2UpdateVisuals(sender as Border, "Exited");
}

private void bEnteredExited_PointerEntered(object sender, 
    PointerRoutedEventArgs e)
{
    _pointerCount++;
    Scenario2UpdateVisuals(sender as Border, "Entered");
}

private void Scenario2UpdateVisuals(Border border, 
    String eventDescription)
{
    switch (eventDescription.ToLower())
    {
        case "exited":
            if (_pointerCount <= 0)
            {
                border.Background = new SolidColorBrush(Colors.Red);
                bEnteredExitedTextBlock.Text = eventDescription;
            }
            break;
        case "moved":
            RotateTransform rt = 
                (RotateTransform)bEnteredExitedTimer.RenderTransform;
            rt.Angle += 2;
            if (rt.Angle > 360) rt.Angle -= 360;
            break;
        default:
            border.Background = new SolidColorBrush(Colors.Green);
            bEnteredExitedTextBlock.Text = eventDescription;
            break;
    }
}

private void Scenario2Reset(object sender, RoutedEventArgs e)
{
    Scenario2Reset();
}

private void Scenario2Reset()
{
    bEnteredExited.Background = new SolidColorBrush(Colors.Green);
    bEnteredExitedTextBlock.Text = string.Empty;
}


요구 사항

지원되는 최소 클라이언트

Windows 8 [Windows 스토어 앱만]

지원되는 최소 서버

Windows Server 2012 [Windows 스토어 앱만]

Namespace

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

Metadata

Windows.winmd

참고 항목

RoutedEventArgs
PointerPressed

 

 

표시:
© 2017 Microsoft