PointerRoutedEventArgs Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Contém os argumentos retornados pela última mensagem de evento de ponteiro.
public ref class PointerRoutedEventArgs sealed : RoutedEventArgs
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class PointerRoutedEventArgs final : RoutedEventArgs
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class PointerRoutedEventArgs : RoutedEventArgs
Public NotInheritable Class PointerRoutedEventArgs
Inherits RoutedEventArgs
- Herança
- Atributos
Exemplos
O exemplo de código a seguir mostra o cenário 2 do exemplo de Entrada. Esse código mostra alguns padrões de uso para manipulação direta usando os eventos PointerPressed, PointerReleased, PointerEntered, PointerExited e PointerMoved .
<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;
}
Comentários
Na maioria dos casos, recomendamos que você obtenha informações de ponteiro por meio do argumento event dos manipuladores de eventos de ponteiro.
Se o argumento event não expor intrinsecamente os detalhes do ponteiro exigidos pelo seu aplicativo, você poderá obter acesso a dados de ponteiro estendidos por meio dos métodos GetCurrentPoint e GetIntermediatePoints de PointerRoutedEventArgs
. Use esses métodos para especificar o contexto dos dados do ponteiro.
A PointerRoutedEventArgs
classe de dados de evento é usada para estes eventos:
- PointerPressed
- PointerCanceled
- PointerCaptureLost
- PointerEntered
- PointerExited
- PointerMoved
- PointerReleased
- PointerWheelChanged
Importante
A entrada do mouse é associada a um único ponteiro atribuído quando detectada pela primeira vez. Se o usuário clicar em um botão do mouse (esquerdo, roda ou direito), será criada uma associação secundária entre o ponteiro e esse botão por meio do evento PointerPressed. O evento PointerReleased é disparado somente quando esse mesmo botão do mouse é liberado (nenhum outro botão pode ser associado ao ponteiro até que o evento seja concluído). Devido a essa associação exclusiva, outros cliques em botões do mouse são roteados por meio do evento PointerMoved. Você pode testar o estado do botão do mouse ao manipular esse evento, conforme mostrado no exemplo a seguir.
private void Target_PointerMoved(object sender, PointerRoutedEventArgs e)
{
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 == PointerDeviceType.Mouse)
{
// To get mouse state, we need extended pointer details.
// We get the pointer info through the getCurrentPoint method
// of the event argument.
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);
}
- O valor do remetente (que está na assinatura delegada, não nessa classe de dados de evento).
- Membros específicos de PointerRoutedEventArgs, como KeyModifiers ou GetCurrentPoint.
- Valores de uma classe de descrição do dispositivo Pointer . Obtenha o Ponteiro da propriedade Pointer .
- Membros provenientes da conceituação de entrada do sistema de um PointerPoint. Use a API GetCurrentPoint para obter um valor pointerPoint e, em seguida, chame a API do PointerPoint , como PointerPoint.Position e PointerPointProperties.
Eventos específicos geralmente têm informações disponíveis nas várias classes de ponto de ponteiro e dispositivo de ponteiro que são relevantes principalmente apenas para esse evento. Por exemplo, ao manipular PointerWheelChanged, talvez você esteja interessado no MouseWheelDelta de PointerPointProperties.
O objeto recuperado pelos GetCurrentPoint
métodos e GetIntermediatePoints
fornece acesso a informações de ponteiro estendido por meio da propriedade Properties , que obtém um objeto PointerPointProperties .
No exemplo a seguir, obtemos propriedades de ponteiro estendido por meio dos objetos PointerPoint e PointerPointProperties . (Consulte Entrada de ponteiro de identificador para obter o exemplo completo.)
String queryPointer(PointerPoint ptrPt)
{
String details = "";
switch (ptrPt.PointerDeviceType)
{
case PointerDeviceType.Mouse:
details += "\nPointer type: mouse";
break;
case PointerDeviceType.Pen:
details += "\nPointer type: pen";
if (ptrPt.IsInContact)
{
details += "\nPressure: " + ptrPt.Properties.Pressure;
details += "\nrotation: " + ptrPt.Properties.Orientation;
details += "\nTilt X: " + ptrPt.Properties.XTilt;
details += "\nTilt Y: " + ptrPt.Properties.YTilt;
details += "\nBarrel button pressed: " + ptrPt.Properties.IsBarrelButtonPressed;
}
break;
case PointerDeviceType.Touch:
details += "\nPointer type: touch";
details += "\nrotation: " + ptrPt.Properties.Orientation;
details += "\nTilt X: " + ptrPt.Properties.XTilt;
details += "\nTilt Y: " + ptrPt.Properties.YTilt;
break;
default:
details += "\nPointer type: n/a";
break;
}
GeneralTransform gt = Target.TransformToVisual(panel);
Point screenPoint;
screenPoint = gt.TransformPoint(new Point(ptrPt.Position.X, ptrPt.Position.Y));
details += "\nPointer Id: " + ptrPt.PointerId.ToString() +
"\nPointer location (parent): " + ptrPt.Position.X + ", " + ptrPt.Position.Y +
"\nPointer location (screen): " + screenPoint.X + ", " + screenPoint.Y;
return details;
}
Normalmente, o objeto retornado por esse método é usado para alimentar dados de ponteiro para um GestureRecognizer. Outro cenário é obter o MouseWheelDelta para um evento PointerWheelChanged ; esse valor está em PointerPointProperties.
Propriedades
Handled |
Obtém ou define um valor que marca o evento roteado como manipulado e impede que a maioria dos manipuladores ao longo da rota de evento manipule o mesmo evento novamente. |
IsGenerated |
Obtém um valor que indica se o evento de ponteiro ocorreu de interação direta com um objeto pelo usuário ou foi gerado pela plataforma com base em alterações na interface do usuário do aplicativo. |
KeyModifiers |
Obtém um valor que indica quais modificadores de chave estavam ativos no momento em que o evento de ponteiro foi iniciado. |
OriginalSource |
Obtém uma referência ao objeto que gerou o evento. Isso geralmente é uma parte de modelo de um controle em vez de um elemento que foi declarado na interface do usuário do aplicativo. (Herdado de RoutedEventArgs) |
Pointer |
Obtém uma referência a um token de ponteiro. |
Métodos
GetCurrentPoint(UIElement) |
Recupera um objeto PointerPoint que fornece informações básicas sobre o ponteiro associado ao evento. |
GetIntermediatePoints(UIElement) |
Recupera uma coleção de objetos PointerPoint que representam o histórico do ponteiro do último evento de ponteiro até e incluindo o evento de ponteiro atual. Cada PointerPoint na coleção fornece informações básicas sobre o ponteiro associado ao evento. O último item da coleção é equivalente ao objeto PointerPoint retornado por GetCurrentPoint. |