PointerRoutedEventArgs Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Contiene gli argomenti restituiti dall'ultimo messaggio di evento del puntatore.
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
- Ereditarietà
- Attributi
Esempio
L'esempio di codice seguente illustra lo scenario 2 dell'esempio di input. Questo codice mostra alcuni modelli di utilizzo per la manipolazione diretta usando gli eventi 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;
}
Commenti
Nella maggior parte dei casi, è consigliabile ottenere informazioni sul puntatore tramite l'argomento evento dei gestori eventi del puntatore.
Se l'argomento dell'evento non espone intrinsecamente i dettagli del puntatore richiesti dall'app, è possibile accedere ai dati del puntatore estesi tramite i metodi GetCurrentPoint e GetIntermediatePoints di PointerRoutedEventArgs
. Utilizzare questi metodi per specificare il contesto dei dati del puntatore.
La PointerRoutedEventArgs
classe di dati dell'evento viene usata per questi eventi:
- PointerPressed
- PointerCanceled
- PointerCaptureLost
- PointerEntered
- PointerExited
- PointerMoved
- PointerReleased
- PointerWheelChanged
Importante
L'input del mouse è associato a un singolo puntatore assegnato quando l'input in questione è stato rilevato. Quando si fa clic su un pulsante del mouse (sinistro, rotellina o destro), si crea un’associazione secondaria tra il puntatore e il pulsante premuto mediante l’evento PointerPressed. L’evento PointerReleased viene generato solo quando lo stesso pulsante del mouse viene rilasciato. Finché questo evento non è completato, nessun altro pulsante può essere associato al puntatore. A causa di questa associazione esclusiva, altri clic su un pulsante del mouse vengono instradati attraverso l’evento PointerMoved. È possibile testare lo stato del pulsante del mouse durante la gestione di questo evento, come illustrato nell'esempio seguente.
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);
}
- Valore del mittente (che si trova nella firma del delegato, non nella classe di dati dell'evento).
- Membri specifici di PointerRoutedEventArgs, ad esempio KeyModifiers o GetCurrentPoint.
- Valori di una classe di descrizione del dispositivo Pointer . Ottenere il puntatore dalla proprietà Pointer .
- Membri provenienti dalla concettualizzazione dell'input di sistema di un PointerPoint. Usare l'API GetCurrentPoint per ottenere un valore PointerPoint , quindi chiamare l'API PointerPoint , ad esempio PointerPoint.Position e PointerPointProperties.
Gli eventi specifici spesso dispongono di informazioni disponibili nelle varie classi di punti puntatore e dispositivo puntatore che sono principalmente rilevanti solo per tale evento. Ad esempio, quando gestisci PointerWheelChanged, potresti essere interessato a MouseWheelDelta da PointerPointProperties.
L'oggetto recuperato dai GetCurrentPoint
metodi e GetIntermediatePoints
fornisce l'accesso alle informazioni del puntatore esteso tramite la proprietà Properties , che ottiene un oggetto PointerPointProperties .
Nell'esempio seguente si ottengono proprietà del puntatore estese tramite gli oggetti PointerPoint e PointerPointProperties . Per l'esempio completo, vedere Gestire l'input del puntatore .
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;
}
In genere, l'oggetto restituito da questo metodo viene usato per inserire dati del puntatore a un oggetto GestureRecognizer. Un altro scenario consiste nell'ottenere MouseWheelDelta per un evento PointerWheelChanged ; tale valore è in PointerPointProperties.
Proprietà
Handled |
Ottiene o imposta un valore che contrassegna l'evento indirizzato come gestito e impedisce alla maggior parte dei gestori lungo la route dell'evento di gestire nuovamente lo stesso evento. |
IsGenerated |
Ottiene un valore che indica se l'evento del puntatore si è verificato dall'interazione diretta con un oggetto da parte dell'utente o è stato generato dalla piattaforma in base alle modifiche apportate all'interfaccia utente dell'applicazione. |
KeyModifiers |
Ottiene un valore che indica i modificatori di chiave attivi al momento dell'avvio dell'evento puntatore. |
OriginalSource |
Ottiene un riferimento all'oggetto che ha generato l'evento. Si tratta spesso di una parte di modello di un controllo anziché di un elemento dichiarato nell'interfaccia utente dell'app. (Ereditato da RoutedEventArgs) |
Pointer |
Ottiene un riferimento a un token del puntatore. |
Metodi
GetCurrentPoint(UIElement) |
Recupera un oggetto PointerPoint che fornisce informazioni di base sul puntatore associato all'evento. |
GetIntermediatePoints(UIElement) |
Recupera un insieme di oggetti PointerPoint che rappresentano la cronologia del puntatore dall'ultimo evento puntatore fino a e include l'evento puntatore corrente. Ogni PointerPoint nella raccolta fornisce informazioni di base sul puntatore associato all'evento. L'ultimo elemento dell'insieme equivale all'oggetto PointerPoint restituito da GetCurrentPoint. |