次の方法で共有


UIElement.CaptureMouse メソッド

定義

この要素にマウスをキャプチャするように強制することを試みます。

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前に、 true が かどうかをIsEnabled確認します。

を呼び出すと CaptureMouse が返されるtrueIsMouseCaptured場合、 も trueになります。

を呼び出すとCaptureMousetrue、 イベントと IsMouseCapturedChanged イベントが発生RoutedEventArgs.SourceしますGotMouseCapture。イベント データでは、 メソッドがCaptureMouse呼び出される要素として報告されます。 キャプチャを強制すると、既存のキャプチャ (特にマウスによるドラッグ アンド ドロップに関連するキャプチャ) に干渉する可能性があります。

すべての要素からマウス キャプチャをクリアするには、 パラメーターを としてnull指定して をelement呼び出しますMouse.Capture

適用対象

こちらもご覧ください