UIElement.ReleasePointerCapture(Pointer) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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)
Parámetros
- value
- Pointer
Referencia del puntero. Use referencias guardadas de capturas anteriores o datos de eventos de puntero para obtener esta referencia.
Ejemplos
En este ejemplo se muestra una llamada ReleasePointerCapture
basada en el control de PointerReleased.
También muestra código para capturar el puntero inicialmente y un patrón para realizar el seguimiento y contar referencias de puntero.
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;
}
Comentarios
Liberar mediante programación la captura de puntero con ReleasePointerCapture
no es la única manera en que un elemento podría perder la captura de puntero. Por ejemplo, los eventos controlados por el usuario, como liberar el puntero (punto táctil, botón del mouse liberado) pueden hacer que se cancele la captura del puntero.
Puede escuchar el evento PointerCaptureLostpara determinar cuándo ocurre esto.
Otra forma de cancelar la captura de puntero es si un puntero sale de una aplicación y otra, mientras que las dos aplicaciones están en paralelo.
Solo debe llamar a ReleasePointerCapture
si el código de la aplicación ha llamado anteriormente a CapturePointer y tiene una referencia a la instancia de puntero determinada en la que desea liberar la captura de puntero. Normalmente, obtendría esa Pointer
referencia a través de un evento como PointerReleased o quizás PointerMoved.
El código de la aplicación podría llamar a CapturePointer desde un UIElement diferente al que tiene cualquier captura de puntero actual. Si es así, eso cancela cualquier captura de puntero realizada previamente por otros elementos.
Un UIElementpuede capturar varios punteros para controlar varios puntos táctiles, como para manipulaciones, pero solo uno UIElement
de una aplicación puede tener capturas de puntero en cualquier momento. Para obtener más información, consulta Controlar la entrada del puntero.