Bagikan melalui


UIElement.CapturePointer(Pointer) Metode

Definisi

Mengatur pengambilan pointer ke UIElement. Setelah ditangkap, hanya elemen yang telah menangkap yang akan menembakkan peristiwa terkait pointer.

public:
 virtual bool CapturePointer(Pointer ^ value) = CapturePointer;
bool CapturePointer(Pointer const& value);
public bool CapturePointer(Pointer value);
function capturePointer(value)
Public Function CapturePointer (value As Pointer) As Boolean

Parameter

value
Pointer

Referensi objek penunjuk.

Mengembalikan

Boolean

bool

true jika objek memiliki tangkapan penunjuk; jika tidak, false.

Contoh

Contoh ini menunjukkan panggilan CapturePointer berdasarkan penanganan PointerPressed. Ini juga menunjukkan pola untuk melacak dan menghitung referensi pointer.

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

Keterangan

Anda hanya dapat berhasil mengambil penunjuk jika penunjuk tersebut dalam keadaan ditekan (Pointer.IsInContact harus true). Apa yang secara fisik merupakan ditekan akan bervariasi berdasarkan jenis perangkat penunjuk (tombol mouse ditekan, titik sentuh ke bawah, stylus dalam kontak). Jika Anda mencoba mengambil penunjuk yang tidak ditekan, atau di mana penunjuk sebelumnya ditekan tetapi sekarang dirilis, CapturePointer mengembalikan false. Pengambilan yang ada tidak terpengaruh oleh CapturePointer panggilan yang mengembalikan false.

Anda biasanya menangkap penunjuk dalam penanganan aktivitas PointerPressed . Instans Pointer yang Anda dapatkan dari data peristiwa PointerRoutedEventArgs dari handler Anda PointerPressed adalah nilai yang harus Anda berikan untuk value parameter saat Anda memanggil CapturePointer dari dalam kode handler Anda.

Anda biasanya mengambil penunjuk karena Anda ingin tindakan penunjuk saat ini memulai perilaku di aplikasi Anda. Dalam hal ini, Anda biasanya tidak ingin elemen lain menangani peristiwa lain yang berasal dari tindakan pointer tersebut, hingga perilaku Anda selesai atau dibatalkan dengan merilis tangkapan pointer. Jika pointer ditangkap, hanya elemen yang telah menangkap yang mendapatkan peristiwa input pointer, dan elemen lain tidak menembakkan peristiwa bahkan jika pointer bergerak ke batasnya. Misalnya, pertimbangkan UI yang memiliki dua elemen yang berdekatan. Biasanya, jika Anda memindahkan penunjuk dari satu elemen ke elemen lainnya, Anda akan terlebih dahulu mendapatkan peristiwa PointerMoved dari elemen pertama, lalu dari elemen kedua. Tetapi jika elemen pertama telah menangkap pointer, maka elemen pertama terus menerima PointerMoved peristiwa bahkan jika pointer yang ditangkap meninggalkan batasnya. Selain itu, elemen kedua tidak mengaktifkan peristiwa PointerEntered untuk penunjuk yang ditangkap saat pointer yang ditangkap memasukinya.

Status penunjuk menangkap dan menghasilkan peristiwa yang terkait dengan penangkapan pointer tidak sepenuhnya hingga kode aplikasi. Jika pengguna merilis pointer, yang menghasilkan peristiwa PointerReleased , dan penunjuk menangkap yang terkait dengan pointer tersebut akan hilang. Ini juga menembakkan PointerCaptureLost pada elemen penangkapan asli.

Dalam kebanyakan kasus, penangkapan pointer akan dilepaskan secara otomatis ketika pengguna menyelesaikan tindakan input yang melepaskan tangkapan pointer sebelumnya (mengangkat titik sentuh, melepaskan tombol mouse kiri, mengambil stylus di luar jangkauan). Kondisi lain yang mungkin merilis pengambilan adalah tindakan apa pun yang juga mengaktifkan peristiwa PointerCanceled . Aplikasi Anda biasanya dapat mengandalkan perilaku pengambilan-rilis yang terkait dengan tindakan input pengguna, tanpa harus secara khusus membatalkan tangkapan pointer dengan ReleasePointerCapture atau ReleasePointerCaptures. Untuk informasi selengkapnya, lihat Interaksi mouse.

Metode CapturePointer akan kembali false jika pointer sudah diambil.

UIElement dapat menangkap lebih dari satu titik pointer pada satu waktu. value Gunakan parameter untuk menunjukkan instans Pointer yang ingin Anda ambil.

Peristiwa input yang mewakili gerakan (seperti Diketuk atau Di-DoubleTapped) biasanya hanya diaktifkan setelah pointer dilepaskan, jadi Anda tidak boleh mencoba menangkap penunjuk di penanganan aktivitas untuk peristiwa gerakan. Referensi Pointer dalam data peristiwa untuk peristiwa gerakan tidak akan diizinkan untuk memulai penangkapan pointer.

Tip

Jangan mencoba menggunakan CapturePointer di luar cakupan penangan peristiwa input yang relevan dengan pointer. Kecuali Anda memiliki Pointer yang Anda yakin dikaitkan dengan pointer yang diizinkan untuk memiliki penangkapan pointer pada saat itu, panggilan CapturePointer Anda tidak akan berpengaruh. Tidak ada cara praktis untuk menghasilkan yang baru Pointer dan memanggil CapturePointer menggunakan pointer baru tersebut. Anda hanya boleh menggunakan referensi yang Pointer disediakan sistem kepada Anda melalui data peristiwa peristiwa input terkait pointer.

Berlaku untuk

Lihat juga