나는 어떤 문제가있어 누군가가 질문에 대답 할 수 있기를 바랍니다. 나는 DeepScreen 프로젝트에서 DeepScreenImage 컨트롤에 DeepZommInitializer 비헤이비어를 배치하는 표준 (딥 줌 컴포저) 프로젝트를 사용했습니다. 사용자가 이미지를 화면 밖으로 드래그하지 않도록 드래그를 제한하려고합니다. 따라서 이미지를 찾을 수 없습니다. 나는 1의 줌에서 시작 위치로 이미지를 가져올 홈 버튼을 추가했다. 어쨌든 여기에 현재 내가 가지고있는 코드가있다. (인터넷에서 답을 찾고있다.)Silverlight DeepZoom Dragging을 사용하면 MultiScaleImage를 화면에서 끌 수 있습니다.
// 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 값은 예상 한 범위가 아닙니다). 어떤 도움이 환상적 일 것입니다!
그 해결책을 찾을 수 있습니다. 당신은 자기 자신의 대답을 표시 할 수 있습니다 :) – Malcolm