PointerRoutedEventArgs Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Содержит аргументы, возвращаемые последним сообщением события указателя.
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
- Наследование
- Атрибуты
Примеры
В следующем примере кода показан сценарий 2 из примера входных данных. В этом коде показаны некоторые шаблоны использования для прямого манипулирования с помощью событий PointerPressed, PointerReleased, PointerEd, PointerExited и 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;
}
Комментарии
В большинстве случаев рекомендуется получить сведения о указателе через аргумент события обработчиков событий указателя.
Если аргумент события не предоставляет встроенные сведения указателя, необходимые приложению, вы можете получить доступ к расширенным данным указателя с помощью методов PointerRoutedEventArgsGetCurrentPoint и GetIntermediatePoints. Используйте эти методы для указания контекста данных указателя.
Класс PointerRoutedEventArgs данных события используется для этих событий:
- Pointerpressed
- PointerCanceled
- PointerCaptureLost
- Указатель введите
- PointerExited
- PointerMoved
- PointerReleased
- PointerWheelChanged
Important
Входные данные мыши связаны с одним указателем, назначенным при первом обнаружении ввода мыши. Нажатие кнопки мыши (влево, колесо или вправо) создает вторичную связь между указателем и этой кнопкой через событие PointerPressed . Событие PointerReleased запускается только при освобождении той же кнопки мыши (пока это событие не будет завершено, кнопка не может быть связана с указателем). Из-за этой эксклюзивной связи другие нажатия кнопки мыши направляются через событие PointerMoved . При обработке этого события можно проверить состояние кнопки мыши, как показано в следующем примере.
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);
}
- Значение отправителя (которое находится на сигнатуре делегата, а не в этом классе данных событий).
- Определенные члены PointerRoutedEventArgs, такие как KeyModifiers или GetCurrentPoint.
- Значения класса описания устройства Pointer . Получение указателя из свойства Pointer .
- Члены, поступающие из системного ввода концептуальной концепции PointerPoint. Используйте API GetCurrentPoint для получения значения PointerPoint , а затем вызовите API PointerPoint, например PointerPoint.Position и PointerPointProperties.
Конкретные события часто имеют информацию, доступную на различных устройствах указателя и классах указателей, которые в основном относятся только к этому событию. Например, при обработке PointerWheelChanged может потребоваться мышьWheelDelta из PointerPointProperties.
Объект, полученный с помощью методов, GetIntermediatePoints предоставляет доступ к расширенным сведениям GetCurrentPoint указателя через свойство Properties, которое получает объект PointerPointProperties.
В следующем примере мы получаем расширенные свойства указателя через объекты PointerPoint и PointerPointProperties . (См. ввод указателя дескриптора для полного примера.)
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;
}
Как правило, объект, возвращаемый этим методом, используется для канала данных указателя на ЖестRecognizer. Другой сценарий — получение события MouseWheelDelta для события PointerWheelChanged ; это значение находится в PointerPointProperties.
Свойства
| Имя | Описание |
|---|---|
| Handled |
Возвращает или задает значение, которое помечает перенаправленное событие как обработанное, и предотвращает повторную обработку того же события большинство обработчиков по маршруту событий. |
| IsGenerated |
Возвращает значение, указывающее, произошло ли событие указателя из прямого взаимодействия с объектом пользователем или было создано платформой на основе изменений пользовательского интерфейса приложения. |
| KeyModifiers |
Возвращает значение, указывающее, какие модификаторы ключей были активными во время инициирования события указателя. |
| OriginalSource |
Возвращает ссылку на объект, вызвавшее событие. Это часто является частью шаблона элемента управления, а не элементом, объявленным в пользовательском интерфейсе приложения. (Унаследовано от RoutedEventArgs) |
| Pointer |
Возвращает ссылку на маркер указателя. |
Методы
| Имя | Описание |
|---|---|
| GetCurrentPoint(UIElement) |
Извлекает объект PointerPoint , предоставляющий основные сведения о указателе, связанном с событием. |
| GetIntermediatePoints(UIElement) |
Извлекает коллекцию объектов PointerPoint , представляющих журнал указателя из последнего события указателя до текущего события указателя. Каждая точка PointerPoint в коллекции предоставляет основные сведения о указателе, связанном с событием. Последний элемент в коллекции эквивалентен объекту PointerPoint , возвращаемого GetCurrentPoint. |