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





Поможет ли эта ссылка? Я не заходил в WPF, но быстрый поиск дает эту ссылку, и, надеюсь, она вам поможет:
http://blogs.vertigo.com/personal/swarren/Blog/Lists/Posts/Post.aspx?ID=7
если я правильно помню, здесь вы можете найти что-то похожее на то, что вам нужно.
Здесь вам понадобится «Панель виртуализации холста». См. Образец здесь 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
Я спросил на прошлой неделе, планировалось ли DeepZoom для WPF (поскольку он доступен в Silverlight). Я получил ссылку на этот код, который очень похож на ваше желаемое решение: Панорамирование и масштабирование в WPF
Я думаю, что вы на правильном пути, используя большой холст / сетку с ScrollViewer. Недавно я сделал нечто подобное, используя ту же настройку.
Для увеличения и уменьшения масштаба вы можете использовать ScaleTransform в свойстве LayoutTransform холста, а затем подключить его к событию MouseWheel. Вы можете изменить ScaleX и ScaleY на «увеличение» и «уменьшение», и все дочерние элементы холста также будут «увеличиваться».
Для панорамирования вы можете скрыть полосы прокрутки в ScrollViewer и использовать событие MouseMove для вызова функции ScrollViewers ScrollToHorizontalOffset () для программного перемещения полос прокрутки. Воспользуйтесь ссылкой, опубликованной в «Оптимальных решениях», это именно то, как это сделать.
Если бы я был на своей машине разработчика, я мог бы дать вам пример кода.
Ознакомьтесь со статьей это CodeProject от Sacha ... У него есть FrictionScrollViewer, который выполняет прокрутку путем перетаскивания мыши (также поддерживает некоторую физику ...)
+1 к этому вопросу - я тоже хочу увидеть что-то подобное! знак равно