UIElement.ReleasePointerCapture(Pointer) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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)
パラメーター
- value
- Pointer
ポインター参照。 この参照を取得するには、以前のキャプチャから保存された参照、またはポインター イベント データを使用します。
例
この例では、PointerReleased の処理に基づく の呼び出しReleasePointerCapture
を示します。
また、最初にポインターをキャプチャするためのコードと、ポインター参照を追跡およびカウントするためのパターンも示します。
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;
}
注釈
を使用してポインター キャプチャをプログラムで ReleasePointerCapture
解放することは、要素がポインター キャプチャを失う唯一の方法ではありません。 たとえば、ポインターを離す (タッチ ポイントを上に、マウス ボタンを離す) などのユーザー主導のイベントによって、ポインター キャプチャが取り消される可能性があります。
PointerCaptureLostイベントをリッスンして、これがいつ発生するかを判断できます。
ポインターキャプチャが取り消されるもう 1 つの方法は、2 つのアプリが並んでいる間にポインターが 1 つのアプリから別のアプリに移動する場合です。
を呼び出 ReleasePointerCapture
す必要があるのは、アプリ コードが以前 に CapturePointer を呼び出し、ポインター キャプチャを解放する特定の Pointer インスタンスへの参照がある場合のみです。 通常は、PointerReleased や PointerMoved などのイベントを介してその参照を取得Pointer
します。
アプリ コードは、現在のポインター キャプチャを持つ UIElement とは異なる UIElement から CapturePointer を呼び出す場合があります。 その場合、他の要素によって以前に行われたポインター キャプチャが取り消されます。
UIElementでは、複数のポインターをキャプチャして操作などの複数のタッチ ポイントを処理できますが、アプリ内の 1 つのポインター キャプチャは一度に 1 UIElement
つだけです。 詳細については、「 ポインター入力を処理する」を参照してください。