左と上部に設定された水平または垂直アライメントを使用せずにオブジェクトをドラッグして移動するためのいくつかの異なる方法は何ですか

StackOverflow https://stackoverflow.com/questions/4339547

質問

私は、ユーザーがサイズを変更し、チャートウィジェットを好きな場所に移動できるようにするダッシュボードアプリケーションを開発しています。私は同時に移動してサイズを変更できることに問題がありました。その理由は、チャートアライメントが次のように設定されている場合です。

chart.HorizontalAlignment = HorizontalAlignment.Left;
chart.VerticalAlignment = VerticalAlignment.Top;

...動きは完全に機能しますが、サイズ変更は検出できない方向に夢中になります。アライメントを次のように切り替えた場合:

chart.HorizontalAlignment = HorizontalAlignment.Stretch;
chart.VerticalAlignment = VerticalAlignment.Stretch;

...移動はオフになりますが、サイズはきちんと機能します。

移動コードは次のとおりです。

public void chart_MouseMove(object sender, MouseEventArgs e)
{
    C1Chart chart = sender as C1Chart;

       if (!ModifierKey)
       {
           if (isMouseCaptured)
           {
               // Calculate the current position of the object.
               double deltaV = e.GetPosition(null).Y - mouseVerticalPosition;
               double deltaH = e.GetPosition(null).X - mouseHorizontalPosition;
               double newTop = deltaV + (double)chart.Margin.Top;
               double newLeft = deltaH + (double)chart.Margin.Left;

               // Set new position of object.            
               chart.Margin = new Thickness(newLeft, newTop, 0, 0); 

               // Update position global variables.
               mouseVerticalPosition = e.GetPosition(null).Y;
               mouseHorizontalPosition = e.GetPosition(null).X;
          }
      }
}

マウスの渡水性、マウスホロゾントゥルポジション、ismousecapturedはチャートマウスダウンイベントに割り当てられ、モディファイアキーはキーボード修飾子のいずれかが移動するかどうかを知るように押されているかどうかを判断するためにブール値です。このコードはMSDNから除外されましたが、私は代替ソリューションを受け入れています。

サイズのコードはここにあります(マイクロソフトの例) またはこちら(Denis Vuykaブログ). 。これが私の質問です: 私が見ていないドラッグ&移動またはサイズ変更(Adornerクラス)を行う方法はありますか?または、このコードをアラインメントハックで使用する方法はありますか。

役に立ちましたか?

解決

MousedragelementBehaviorを調べましたか?http://blogs.msdn.com/b/dphill/archive/2009/09/25/blend-behaviors.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top