UIElement.ReleasePointerCapture(Pointer) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Освобождает записи указателя для захвата одного конкретного указателя этим элементом UIElement.
public:
virtual void ReleasePointerCapture(Pointer ^ value) = ReleasePointerCapture;
void ReleasePointerCapture(Pointer const& value);
public void ReleasePointerCapture(Pointer value);
function releasePointerCapture(value)
Public Sub ReleasePointerCapture (value As Pointer)
Параметры
- value
- Pointer
Ссылка на указатель. Чтобы получить эту ссылку, используйте сохраненные ссылки из предыдущих записей или данные события указателя.
Примеры
В этом примере показан вызов ReleasePointerCapture
на основе обработки PointerReleased.
Здесь также показан код для первоначального захвата указателя и шаблон для отслеживания и подсчета ссылок на указатели.
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;
}
Комментарии
Программное освобождение захвата указателя с помощью ReleasePointerCapture
— это не единственный способ, которым элемент может потерять захват указателя. Например, управляемые пользователем события, такие как освобождение указателя (сенсорная точка вверх, кнопка мыши отпущена), могут привести к отмене захвата указателя.
Вы можете прослушивать событие PointerCaptureLost, чтобы определить, когда это произойдет.
Другой способ отмены записи указателя — перемещение указателя из одного приложения в другое, в то время как два приложения находятся рядом.
Вызов следует вызывать ReleasePointerCapture
только в том случае, если код приложения ранее вызывал CapturePointer и содержит ссылку на конкретный экземпляр указателя , в котором требуется освободить запись указателя. Как правило, вы получаете эту Pointer
ссылку через событие , например PointerReleased или, возможно, PointerMoved.
Код приложения может вызывать CapturePointer из uiElement , отличного от того, который имеет текущий захват указателя. Если да, это отменяет любой захват указателя, ранее выполненный другими элементами.
UIElementможет захватывать несколько указателей для обработки нескольких точек касания, например для манипуляций, но только один UIElement
в приложении может одновременно захватывать любые указатели. Дополнительные сведения см. в разделе Обработка входных данных указателя.