Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Масштабирование с сохранением позиции / 5 сообщений из 5, страница 1 из 1
19.01.2010, 19:41
    #36419012
Krakozabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование с сохранением позиции
Что-то я зациклился — туплю, не могу понять как делать:

Имеется:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<ScrollViewer Name="ScrW">
     <ViewBox Name="ViewB" Stretch="UniformToFill">
          <Canvas Name="Field" ClipToBounds="True">
               <!--Некая графика, превышающая размер экрана-->
          </Canvas>
     </ViewBox>
</ScrollViewer>

Сделан обработчик события колёсика мыши, который изменяет размер ViewBox-а (и соответственно размер скроллинга) :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
private void UserControl_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
     //Масштабирование
     int dx = e.Delta;
     int dy = (int)(dx * Field.Height / Field.Width);

     if (((ScrW.ScrollableWidth > 0 && dx <= 0)  || (ViewB.Width < Field.Width * 1.8 && dx > 0))
     || ((ScrW.ScrollableHeight > 0 && dy <= 0) || (ViewB.Height < Field.Height * 1.8 && dy > 0)))
     {
         ViewB.Width += dx;
         ViewB.Height += dy;
     }
     e.Handled = true;
}

А не получается у меня сделать так, чтобы увеличение происходило относительно позиции курсора (как это сделано например в Яндекс.Карты) Может кто-нибудь делал что-то подобное?
...
Рейтинг: 0 / 0
20.01.2010, 09:48
    #36419601
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование с сохранением позиции
KrakozabrА не получается у меня сделать так, чтобы увеличение происходило относительно позиции курсора (как это сделано например в Яндекс.Карты) Может кто-нибудь делал что-то подобное?
Я как-то проект на codeplex выкладывал, в котором это реализовано. Глянь тут: http://photoeditor.codeplex.com/
...
Рейтинг: 0 / 0
20.01.2010, 09:56
    #36419619
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование с сохранением позиции
Там все достаточно просто. Считаем текущую позицию мыши, применяем Zoom (ScaleTransform), снова считаем позицию мыши и транспонируем все изображение на разницу между начальным положением и новым положением с помощью TranslateTransform.
...
Рейтинг: 0 / 0
20.01.2010, 13:54
    #36420412
Krakozabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование с сохранением позиции
Roman S. GolubinЯ как-то проект на codeplex выкладывал, в котором это реализовано. Глянь тут: http://photoeditor.codeplex.com/
С примером разобрался, однако..
У меня в функции DoZoom не менятся точка после
Код: plaintext
_zoomTransform.ScaleX = _zoomTransform.ScaleY = newZoom;
(тоесть на вход DoMove всегда подаётся 0;0)
Такое чувство, что трансформация применяется когда-то позже
А в твоём проекте меняется. Что я мог забыть?
...
Рейтинг: 0 / 0
26.01.2010, 11:55
    #36430908
Krakozabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование с сохранением позиции
Всё получилось, спасибо )
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Масштабирование с сохранением позиции / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]