私はいくつかの問題を抱えており、誰かが質問に答えてくれることを願っています。MultiScaleImage コントロールに DeepZommInitializer 動作を配置する標準 (ディープ ズーム コンポーザー) プロジェクトを使用したディープ ズーム プロジェクトがあります。ドラッグを制限して、ユーザーが画像を画面外にドラッグしないようにしようとしています (したがって、画像を見つけることができません)。ズーム1で画像を開始位置に戻すホームボタンを追加しました。とにかく、現在持っているコードは次のとおりです(インターネットで答えを探しています)。
// msi is the multiscale image
msi.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e)
{
lastMouseDownPos = e.GetPosition(msi); // class level var
lastMouseViewPort = msi.ViewportOrigin; // class level var
mouseDown = true; // class level var
msi.CaptureMouse();
};
msi.MouseMove += delegate(object sender, MouseEventArgs e)
{
lastMousePos = e.GetPosition(msi);
if (duringDrag)
{
Point newPoint = lastMouseViewPort;
newPoint.X += (lastMouseDownPos.X - lastMousePos.X) / msi.ActualWidth * msi.ViewportWidth;
newPoint.Y += (lastMouseDownPos.Y - lastMousePos.Y) / msi.ActualWidth * msi.ViewportWidth;
var limits = new Rect(new Point(1, 1 / msi.AspectRatio), new Point(-1, -1 / msi.AspectRatio));
if (newPoint.X > limits.Right * .999)
{
newPoint.X += (-2 * (lastMouseDownPos.X - lastMousePos.X)) / msi.ActualWidth * msi.ViewportWidth; // Reverses direction when going off left
}
if (newPoint.Y > limits.Bottom * .999)
{
newPoint.Y += (-2 * (lastMouseDownPos.Y - lastMousePos.Y)) / msi.ActualWidth * msi.ViewportWidth; // Reverses direction when going off top of screen
}
msi.ViewportOrigin = lastMouseViewPort = newPoint;
lastMouseDownPos = lastMousePos;
}
};
右と下で機能するソリューションが本当に必要ですが、ズームするとすべての値がすべて変わります。ズーム レベルが 1 の場合、制限コードが機能します。これがインターネットのどこにも見つからないなんて信じられません。しかし、ズームが変更された瞬間、すべてが窓の外に出ます (newPoint の値は、私が期待する範囲内ではありません)。どんな助けでも素晴らしいでしょう!