Панель прокрутки в стиле Google Maps в WPF

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

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

+1 к этому вопросу - я тоже хочу увидеть что-то подобное! знак равно

Erik Forbes 25.09.2008 21:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
17
1
7 762
6

Ответы 6

Поможет ли эта ссылка? Я не заходил в WPF, но быстрый поиск дает эту ссылку, и, надеюсь, она вам поможет:

http://blogs.vertigo.com/personal/swarren/Blog/Lists/Posts/Post.aspx?ID=7

если я правильно помню, здесь вы можете найти что-то похожее на то, что вам нужно.

http://www.codeproject.com/KB/vista/swordfishcharts.aspx

Здесь вам понадобится «Панель виртуализации холста». См. Образец здесь 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, который выполняет прокрутку путем перетаскивания мыши (также поддерживает некоторую физику ...)

Другие вопросы по теме