2

私はFormsの経験はありますが、WPFに少し慣れていないので、最終的にWPFの使用方法を理解しようと決心しました。したがって、ドラッグ可能なコントロールに到達したとき、これは私が思いついたコードです(WPFで動作するように変更しようとしましたが、コントロールはどこでもひねります):

private void rectangle1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed) {
        double x = this.Left + (double)e.GetPosition(this).X - (double)rectangle1.Margin.Left;
        double y = this.Top + (double)e.GetPosition(this).Y - (double)rectangle1.Margin.Top;
        rectangle1.Margin = new Thickness(x, y, rectangle1.Margin.Right, rectangle1.Margin.Bottom);
    }
}
4

4 に答える 4

5

ドラッグ、サイズ変更、回転などを実現するために、装飾を使用したい。

于 2012-04-05T04:16:04.957 に答える
2

これは、MSDN の問題に関する非常に優れた記事です。また、Google で簡単に検索すると、DnD での食事を楽しむための豊富な選択肢が明らかになります。

于 2012-04-05T04:36:40.430 に答える
1

手作業で行いたい場合は、次のアルゴリズムを使用します。

  1. MouseDownイベント時: Mouse position、コントロールのTopLeft 位置、およびこれらの座標のデルタ (オフセット) を保存し、いくつかのブール フィールド フラグを設定します。IsDragStartted真に。
  2. MouseMoveドラッグが開始されたことを確認し、マウスの位置とオフセットを使用して、コントロールの TopLeft 位置の新しい値を計算します

  3. falseに設定されたMouseUpイベント時IsDragStartted

于 2012-04-05T04:35:19.697 に答える