UIElement.ReleasePointerCapture(Pointer) Método

Definição

Libera capturas de ponteiro para captura de um ponteiro específico por este UIElement.

C#
public void ReleasePointerCapture(Pointer value);

Parâmetros

value
Pointer

A referência de ponteiro. Use referências salvas de capturas anteriores ou dados de evento de ponteiro para obter essa referência.

Exemplos

Este exemplo mostra a chamada de ReleasePointerCapture com base no tratamento de PointerReleased.

Ele também mostra o código para capturar o ponteiro inicialmente e um padrão para rastrear e contar referências de ponteiro.

C#
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;
}

Comentários

Liberar programaticamente a captura de ponteiro com ReleasePointerCapture não é a única maneira de um elemento perder a captura de ponteiro. Por exemplo, eventos controlados pelo usuário, como liberar o ponteiro (ponto de toque para cima, botão do mouse liberado) podem fazer com que a captura de ponteiro seja cancelada.

Você pode escutar o evento PointerCaptureLostpara determinar quando isso acontece.

Outra maneira de cancelar a captura de ponteiro é se um ponteiro sair de um aplicativo e entrar em outro aplicativo enquanto os dois aplicativos estiverem lado a lado.

Você só deve chamar ReleasePointerCapture se o código do aplicativo tiver chamado CapturePointer anteriormente e tiver uma referência à instância de Ponteiro específica em que você deseja liberar a captura de ponteiro. Normalmente, você obteria essa referência de Ponteiro por meio de um evento como PointerReleased ou, talvez , PointerMoved.

O código do aplicativo pode chamar CapturePointer de um UIElement diferente daquele que tem qualquer captura de ponteiro atual. Nesse caso, isso cancela qualquer captura de ponteiro feita anteriormente por outros elementos.

Um UIElementpode capturar vários ponteiros para lidar com vários pontos de toque, como para manipulações, mas apenas um UIElementem um aplicativo pode ter qualquer captura de ponteiro a qualquer momento. Para obter mais informações, consulte Entrada de ponteiro de identificador.

Aplica-se a

Produto Versões
WinRT Build 10240, Build 10586, Build 14383, Build 15063, Build 16299, Build 17134, Build 17763, Build 18362, Build 19041, Build 20348, Build 22000, Build 22621, Build 26100

Confira também