2011-04-30 9 views
2

これは私のウィンドウをドラッグしなければならないコードです。それはちょっとうまくいく!種類の...WPFでボードをドラッグすることなく、効率的に行う方法は?

Private Point startPoint; 

private void Window_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 

    startPoint = e.GetPosition(null); 
} 
private void Window_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.LeftButton == MouseButtonState.Pressed) 
    { 
     Point relative = e.GetPosition(null); 
     Point AbsolutePos = new Point(relative.X + this.Left, relative.Y + this.Top); 
     this.Top = AbsolutePos.Y - startPoint.Y; 
     this.Left = AbsolutePos.X - startPoint.X; 
    } 
} 

問題は、私はマウスがあまりにも速く移動した場合、それは窓の外に行くとあるMoveMouseイベントを上げる停止しますです。第二に、ドラッグウィンドウがまったく滑らかではないので、私は正しい方法でやっていないと信じています。第三に、私はWindow_MouseLeftButtonDownでこれを試しています。これはマウスクリックごとにイベントを1回だけ発生させます。 私は初心者です.DroppingやData Transferを使わない簡単な例が私のような初心者の方々にも分かります。 Stack OverFlowのユーザーがお手伝いします。

答えて

0

マウスを紛失したのは、マウスをキャプチャできなかったためです。標準的な手順は以下のとおりです。

  • マウスダウンイベントでcapture the mouseとボタンはマウスアップイベントで
  • release the mouse capture押された場合
  • がマウス移動イベントでのマウスの動きを処理マウスの位置を記録して実行します任意の最終処理

これまでのところ、あなたは正しい方法をとっています。速度は、ウィンドウ自体の再描画と、ウィンドウが通過するウィンドウと、コンピュータがどれぐらい速く、ドラッグしている間にコンピュータ上で何が起こっているかによって制限されます。

+0

は、WPFのように思える行ってもいいです、それは滑らかではなく、このWPFウィンドウフリックを少し行きます。私はEugenの答えを試しました。その1行は、私が得た結果を得るために数時間後に持っていたすべてのコードを置き換える奇跡を作ります。ウィンドウはまだ私のコードのようにフリックしますが、私はもうポインタを緩めません。 – user722886

+0

あなたのガイドラインをお寄せいただきありがとうございます。別の時間をもう一度試して、効率的なコードを自分で作成できるかどうかを確認します。どうもありがとう。 – user722886

2

解決策は、あなたが考えるよりも実際には簡単です。メモ帳の周りにドラッグして、かなり重い技術がある。この行をあなたのコンストラクタで

MouseDown += delegate { DragMove(); }; 

を置き、あなたは:)

+0

ありがとうEugen、この美しいラインはgooglewhereは見つからない、うまく動作するが、ウィンドウはまだまだ動く。取引がWPFのときは、コンピュータのパフォーマンスが必要になる。 – user722886

+0

それはあなたのグラフィックスカードでなければならない、それは私に非常に滑らかに動く。私はnVidia GTX 570を持っています。 – Eugen

関連する問題