ユーザーがチャートウィジェットのサイズを変更したり、好きな場所に移動したりできるようにするダッシュボードアプリケーションを開発しています。移動とサイズ変更を同時に行うことができないという問題がありました。その理由は、チャートの配置が次のように設定されている場合です。
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;
}
}
}
mouseVerticalPosition、mouseHorizontalPosition、isMouseCapturedは、チャートのマウスダウンイベントで割り当てられ、ModifierKeyはブール値で、移動するかどうかを知るためにキーボード修飾子のいずれかが押されたかどうかを示します。このコードはMSDNから削除されましたが、私は別の解決策を受け入れています。
サイズ変更コードは、ここ(Microsoftの例)またはここ(Denis Vuyka Blog)にあります。ここに私の質問があります:私が見ないドラッグアンドムーブまたはサイズ変更(Adornerクラス)を行う別の方法はありますか?または、このコードをアライメントハックで使用する方法はありますか?