16

クリックしてマウスで移動することで画面上をドラッグできるac#WPFフォームを作成しようとしています。フォームの特徴には、完全に透明で、1 つの画像しか含まれていないことが含まれます。これは、ウィンドウ スタイルが none であり、タスク バーに表示されないと言われています。したがって、基本的に、アプリの実行中に表示できるのは小さな画像だけです。理想的には、マウスの左ボタンをクリックして押したまま移動すると、デスクトップ上でドラッグできるようにしたいと考えています。

これを達成できる簡単な方法を知っている人はいますか、それともビルドイン機能を見落としていますか?

ありがとう。

4

5 に答える 5

21

以前の回答は答えにヒットしましたが、完全な例は次のとおりです。

   private void Window_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            DragMove();
        }
    }
于 2010-08-10T17:47:17.033 に答える
20

ウィンドウのマウス ダウン イベントで Window.DragMove メソッドを使用できます。

于 2009-05-15T05:57:15.040 に答える
3

以下は、画面上で WPF フォームをドラッグする簡単なコードです。このコードの一部を別の投稿で見たことがあるかもしれませんが、WPF フォームをドラッグする必要に合わせて変更しただけです。

MouseLeftButtonDown でフォームの位置を取得する必要があることに注意してください。これにより、画面上でマウス ポインターをドラッグするときに、フォーム上の同じ場所にマウス ポインターを配置したままにすることができます。

また、画面に対するマウスの位置を取得するには、次の参照を追加する必要があります: System.Windows.Forms

必要なプロパティ:

private bool _IsDragInProgress { get; set; }
private System.Windows.Point _FormMousePosition {get;set;}

コード:

        protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
        {
            this._IsDragInProgress = true;
            this.CaptureMouse();
            this._FormMousePosition = e.GetPosition((UIElement)this);
            base.OnMouseLeftButtonDown(e);
        }

        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (!this._IsDragInProgress)
                return;

            System.Drawing.Point screenPos = (System.Drawing.Point)System.Windows.Forms.Cursor.Position;
            double top = (double)screenPos.Y - (double)this._FormMousePosition.Y;
            double left = (double)screenPos.X - (double)this._FormMousePosition.X;
            this.SetValue(MainWindow.TopProperty, top);
            this.SetValue(MainWindow.LeftProperty, left);
            base.OnMouseMove(e);
        }

        protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
        {
            this._IsDragInProgress = false;
            this.ReleaseMouseCapture();
            base.OnMouseLeftButtonUp(e);
        }
于 2014-02-19T19:53:35.033 に答える