2008-09-25 3 views
16

У меня есть холст, где я рисую кучу фигур и других элементов пользовательского интерфейса. Этот холст может быть очень большим, поэтому я хочу поместить его в панель, которая позволяет мне увеличивать/уменьшать масштаб с помощью мыши и прокручивать, перетаскивая мышь, подобно Google Maps. Самое близкое, что я мог найти, это ScrollViewer, но, очевидно, это недостаточно близко.Google Maps-Like Scrolling Panel в WPF

Кто-нибудь сделал это в WPF и имел какие-либо коды XAML и/или C#?

+2

+1 на этот вопрос - я хочу увидеть что-то вроде этого слишком! =) – 2008-09-25 17:14:21

ответ

4

Я asked last week ли планировал DeepZoom для WPF (так как он доступен на Silverlight). Я получил ссылку на этот код, который очень похож на ваше желаемое решение: Pan and Zoom in WPF

+0

+1 для удивительной ссылки - SO FTW ... – jnoss 2010-03-07 19:49:01

2

Я думаю, что вы на правильном пути, используя большой холст/сетку с ScrollViewer. Недавно я сделал что-то подобное, используя ту же настройку.

Для увеличения и уменьшения масштаба вы можете использовать ScaleTransform в свойстве LayoutTransform холста, а затем подключить его к событию MouseWheel. Вы можете изменить ScaleX и ScaleY на «масштабирование», и все дочерние элементы холста будут «масштабироваться».

Для панорамирования вы можете скрыть полосы прокрутки в ScrollViewer и использовать событие MouseMove для вызова функции ScrollToHorizontalOffset() ScrollViewers ScrollToHorizontalOffset(), чтобы программно перемещать полосы прокрутки. Используйте ссылку, которую разместили «Оптимальные решения», и это точно, как это сделать.

Если бы я был на моей машине dev, я мог бы привести вам пример кода.

0

Заканчивать this статьи CodeProject Сашей ... У него есть FrictionScrollViewer, что делает прокрутку с помощью мыши (также поддерживают некоторые физики ...)