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이벤트를 수신 대기하여 언제 이런 일이 발생하는지 확인할 수 있습니다.
포인터 캡처를 취소할 수 있는 또 다른 방법은 두 앱이 나란히 있는 동안 포인터가 한 앱에서 다른 앱으로 이동하는 경우입니다.
앱 코드가 이전에 CapturePointer를 호출했으며 포인터 캡처를 해제하려는 특정 포인터 instance 대한 참조가 있는 경우에만 를 호출 ReleasePointerCapture
해야 합니다. 일반적으로 PointerReleased 또는 PointerMoved와 같은 이벤트를 통해 해당 Pointer
참조를 가져옵니다.
앱 코드는 현재 포인터 캡처가 있는 것과 다른 UIElement에서 CapturePointer를 호출할 수 있습니다. 이 경우 다른 요소에서 이전에 만든 포인터 캡처를 취소합니다.
UIElement는여러 포인터를 캡처하여 조작과 같은 여러 터치 포인트를 처리할 수 있지만 앱의 하나 UIElement
만 한 번에 포인터 캡처를 가질 수 있습니다. 자세한 내용은 포인터 입력 처리를 참조하세요.