UIElement.CaptureMouse 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
嘗試強制將滑鼠的捕捉給這個項目。
public:
virtual bool CaptureMouse();
public bool CaptureMouse ();
abstract member CaptureMouse : unit -> bool
override this.CaptureMouse : unit -> bool
Public Function CaptureMouse () As Boolean
傳回
如果成功捕捉到滑鼠則為 true
,否則為 false
。
實作
範例
下列範例會實作一對滑鼠和按鍵輸入組合的處理常式,以擷取 (和取消擷取) 滑鼠,並啟用特殊的滑鼠模式來檢視 3D 模型。
private void MouseDownHandler(object sender, MouseButtonEventArgs e)
{
if (!Enabled) return;
e.Handled = true;
if (Keyboard.IsKeyDown(Key.F1))
{
Reset();
return;
}
UIElement el = (UIElement)sender;
_point = e.MouseDevice.GetPosition(el);
// Initialize the center of rotation to the lookatpoint
if (!_centered)
{
ProjectionCamera camera = (ProjectionCamera)_slaves[0].Camera;
_center = camera.LookDirection;
_centered = true;
}
_scaling = (e.MiddleButton == MouseButtonState.Pressed);
if (!Keyboard.IsKeyDown(Key.Space))
_rotating = true;
else
_rotating = false;
el.CaptureMouse();
}
private void MouseUpHandler(object sender, MouseButtonEventArgs e)
{
if (!_enabled) return;
e.Handled = true;
// Stuff the current initial + delta into initial so when we next move we
// start at the right place.
if (_rotating)
{
_rotation = _rotationDelta * _rotation;
}
else
{
_translate += _translateDelta;
_translateDelta.X = 0;
_translateDelta.Y = 0;
}
//_scale = _scaleDelta*_scale;
UIElement el = (UIElement)sender;
el.ReleaseMouseCapture();
}
Private Sub MouseDownHandler(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
If Not Enabled Then
Return
End If
e.Handled = True
If Keyboard.IsKeyDown(Key.F1) = True Then
Reset()
Return
End If
Dim el As UIElement = CType(sender, UIElement)
_point = e.MouseDevice.GetPosition(el)
' Initialize the center of rotation to the lookatpoint
If Not _centered Then
Dim camera As ProjectionCamera = CType(_slaves(0).Camera, ProjectionCamera)
_center = camera.LookDirection
_centered = True
End If
_scaling = (e.MiddleButton = MouseButtonState.Pressed)
If Keyboard.IsKeyDown(Key.Space) = False Then
_rotating = True
Else
_rotating = False
End If
el.CaptureMouse()
End Sub
Private Sub MouseUpHandler(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
If Not _enabled Then
Return
End If
e.Handled = True
' Stuff the current initial + delta into initial so when we next move we
' start at the right place.
If _rotating = True Then
_rotation = _rotationDelta * _rotation
Else
_translate += _translateDelta
_translateDelta.X = 0
_translateDelta.Y = 0
End If
'_scale = _scaleDelta * _scale
Dim el As UIElement = CType(sender, UIElement)
el.ReleaseMouseCapture()
End Sub
備註
若要擷取,必須啟用專案。 在呼叫 CaptureMouse 之前,請檢查 是否 IsEnabledtrue
為 。
如果呼叫 CaptureMouse 傳 true
回 ,則 IsMouseCaptured 也是 true
。
如果呼叫 CaptureMouse 傳 true
回 ,則會 GotMouseCapture 引發 和 IsMouseCapturedChanged 事件, RoutedEventArgs.Source 並在事件資料中報告為呼叫 方法的專案 CaptureMouse 。 如果您強制擷取,您可能會干擾現有的擷取,特別是與滑鼠拖放相關的擷取。
若要清除所有元素的滑鼠擷取,請使用提供做為 null
的參數 element
呼叫 Mouse.Capture 。