Ответ 1
I спросил на прошлой неделе, был ли DeepZoom запланирован для WPF (поскольку он доступен в Silverlight). Я получил ссылку на этот код, который очень похож на ваше желаемое решение: Pan и Zoom в WPF
У меня есть Canvas, где я рисую кучу фигур и других элементов пользовательского интерфейса. Этот холст может быть очень большим, поэтому я хочу поместить его в панель, которая позволяет мне увеличивать/уменьшать масштаб с помощью мыши и прокручивать, перетаскивая мышь, подобно Google Maps. Самое близкое, что я мог найти, это ScrollViewer, но, очевидно, это недостаточно близко.
Кто-нибудь сделал это в WPF и имел какой-нибудь код XAML и/или С#?
I спросил на прошлой неделе, был ли DeepZoom запланирован для WPF (поскольку он доступен в Silverlight). Я получил ссылку на этот код, который очень похож на ваше желаемое решение: Pan и Zoom в WPF
Помогла ли эта ссылка? Я не получил в WPF, но быстрый поиск дает эту ссылку и, надеюсь, вам это поможет:
http://blogs.vertigo.com/personal/swarren/Blog/Lists/Posts/Post.aspx?ID=7
Я думаю, что вы на правильном пути, используя большой холст/сетку с ScrollViewer. Недавно я сделал что-то подобное, используя ту же настройку.
Для увеличения и уменьшения масштаба вы можете использовать ScaleTransform в свойстве LayoutTransform холста, а затем подключить его к событию MouseWheel. Вы можете изменить ScaleX и ScaleY на "масштабирование", и все дочерние элементы canvas будут также "масштабироваться".
Для панорамирования вы можете скрыть полосы прокрутки в ScrollViewer и использовать событие MouseMove для вызова функции ScrollToHorizontalOffset() ScrollViewers ScrollToHorizontalOffset() для плавного перемещения полос прокрутки. Используйте ссылку, которую "Оптимальные решения" отправили, это как раз то, как это сделать.
Если бы я был на моей машине dev, я мог бы дать вам пример кода.
Что вам нужно здесь, это "панель виртуализации холста". Пожалуйста, смотрите образец здесь http://blogs.msdn.com/jgoldb/archive/2008/03/08/performant-virtualized-wpf-canvas.aspx
Подробнее о VirtualizingPanel http://blogs.msdn.com/dancre/archive/2006/02/06/526310.aspx
Если я правильно помню, вы можете найти что-то вроде того, что хотите.
Откажитесь от this Статья CodeProject от Sacha... У него есть FrictionScrollViewer, который выполняет прокрутку, перетаскивая мышь (также поддерживает некоторую физику...)