UIElement.CapturePointer(Pointer) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
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.