Compartilhar via


UIElement.ReleasePointerCapture(Pointer) Método

Definição

Libera capturas de ponteiro para captura de um ponteiro específico por 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

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 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.

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 Pointer referência 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 UIElement em um aplicativo pode ter capturas de ponteiro de uma só vez. Para obter mais informações, consulte Entrada de ponteiro de identificador.

Aplica-se a

Confira também