UIElement.CapturePointer(Pointer) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
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
參數
- value
- Pointer
指標物件參考。
傳回
bool
true
如果物件具有指標擷取,則為 ;否則為 false
。
範例
此範例示範根據處理PointerPressed呼叫 CapturePointer
。 它也會顯示追蹤和計算指標參考的模式。
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;
}
備註
如果指標處於按下狀態,則您只能成功擷取指標, (Pointer.IsInContact 應該 true
) 。 實際構成的內容會根據按下的指標裝置類型而有所不同, (按下滑鼠按鍵、觸控點向下、連絡人中的手寫筆) 。 如果您嘗試擷取未按下的指標,或先前按下指標但已放開的位置,CapturePointer 會傳 false
回 。 現有擷取不會受到 CapturePointer
傳 false
回 的呼叫影響。
您通常會擷取 PointerPressed 事件處理常式內的指標。 您從處理常式的PointerRoutedEventArgs事件資料 PointerPressed
取得的Pointer實例是您從處理常式程式碼內呼叫 CapturePointer
時,應該為 value
參數傳遞的值。
您通常會擷取指標,因為您想要目前的指標動作在應用程式中起始行為。 在此情況下,您通常不希望其他元素處理來自該指標動作的任何其他事件,直到您的行為完成或釋放指標擷取來取消為止。 如果擷取指標,則只有已擷取的專案會取得指標的輸入事件,而其他元素也不會引發事件,即使指標移至其界限也一樣。 例如,請考慮具有兩個相鄰元素的 UI。 一般而言,如果您將指標從某個元素移到另一個專案,您必須先從第一個專案取得 PointerMoved 事件,然後再從第二個專案取得。 但是,如果第一個專案已擷取指標,則即使擷取的指標離開其界限,第一個專案仍會繼續接收 PointerMoved
事件。 此外,當擷取的指標進入指標時,第二個專案不會引發擷取指標的 PointerEntered 事件。
指標擷取狀態,並產生與指標擷取相關的事件,完全不是應用程式程式碼。 如果使用者放開指標,則會產生 PointerReleased 事件,且指標擷取與該指標相關聯的指標會遺失。 這也會在原始擷取專案上引發 PointerCaptureLost 。
在大部分情況下,當使用者完成輸入動作以釋放先前指標擷取的輸入動作時,會自動釋放指標擷取, (移動觸控點、釋放滑鼠左鍵、將手寫筆從範圍) 。 另一個可能釋放擷取的條件是也會引發 PointerCanceled 事件的任何動作。 您的應用程式通常依賴與使用者輸入動作相關聯的擷取發行行為,而不需要特別使用 ReleasePointerCapture 或 ReleasePointerCaptures取消指標擷取。 如需詳細資訊,請參閱互動。
如果已擷取指標,方法 CapturePointer
會傳回 false
。
UIElement可以一次擷取多個指標點。
value
使用 參數來指出您想要擷取的指標實例。
代表手勢的輸入事件 (,例如 Tapped 或 DoubleTapped) 通常會在放開指標之後引發,因此您不應該嘗試在事件處理常式中擷取手勢事件的指標。 不允許筆勢事件的事件資料中的 指標 參考起始指標擷取。
提示
請勿嘗試在指標相關的輸入事件處理常式範圍之外使用 CapturePointer
。 除非您有一個您確定的 指標 與允許在該時間有指標擷取的指標相關聯,否則您的 CapturePointer 呼叫不會有任何作用。 沒有任何實際的方法可以使用新的指標產生新的 Pointer
和 呼叫 CapturePointer
。 您應該只使用 Pointer
系統透過指標相關輸入事件的事件資料提供給您的參考。