Я хотел бы сделать небольшое приложение Silverlight, которое отображает одно довольно большое изображение, которое можно увеличить, прокручивая мышь, а затем перемещая ее с помощью мыши.это похоже на функцию в Google Maps, и я не хочу использовать DeepZoom.
вот что у меня есть в данный момент.пожалуйста, имейте в виду, что это мое первое приложение Silverlight: это приложение для меня, чтобы увидеть, что это хороший способ встроить сайт.так что это демо-приложение и поэтому имеет плохие имена переменных.
исходное изображение шириной 1800 пикселей.
private void sc_MouseWheel(object sender, MouseWheelEventArgs e)
{
var st = (ScaleTransform)plaatje.RenderTransform;
double zoom = e.Delta > 0 ? .1 : -.1;
st.ScaleX += zoom;
st.ScaleY += zoom;
}
это работает, но может использовать некоторое сглаживание, и оно расположено вверху слева и не по центру.
панорамирование выглядит так: найдено @ @ 1014 *Pan & Zoom Image и преобразовал его в это ниже для работы в Silverlight
Point start;
Point origin;
bool captured = false;
private void plaatje_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
plaatje.CaptureMouse();
captured = true;
var tt = (TranslateTransform)((TransformGroup)plaatje.RenderTransform)
.Children.First(tr => tr is TranslateTransform);
start = e.GetPosition(canvasje);
origin = new Point(tt.X, tt.Y);
}
private void plaatje_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
plaatje.ReleaseMouseCapture();
captured = false;
}
private void plaatje_MouseMove(object sender, MouseEventArgs e)
{
if (!captured) return;
var tt = (TranslateTransform)((TransformGroup)plaatje.RenderTransform).Children.First(tr => tr is TranslateTransform);
double xVerschuiving = start.X - e.GetPosition(canvasje).X;
double yVerschuiving = start.Y - e.GetPosition(canvasje).Y;
tt.X = origin.X - xVerschuiving;
tt.Y = origin.Y - yVerschuiving;
}
, поэтому масштабирование не плавное и панорамирование не работает, потому что когда я нажимаю на него, изображение исчезает.