Compartir a través de


UIElement.ReleasePointerCapture(Pointer) Método

Definición

Libera capturas de puntero para la captura de un puntero específico de este 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)

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.

Se aplica a

Consulte también