UIElement.ReleasePointerCapture(Pointer) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
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 в приложении может содержать любые записи указателей в любое время. Дополнительные сведения см. в разделе "Ввод указателя на дескриптор".