Я думаю, что вы на правильном пути с использованием большого холста / сетки с ScrollViewer. Я недавно сделал нечто подобное, используя ту же настройку.
Для увеличения и уменьшения масштаба вы можете использовать ScaleTransform в свойстве LayoutTransform холста, а затем подключить его к событию MouseWheel. Вы можете изменить ScaleX и ScaleY, чтобы «увеличивать и уменьшать», и все дочерние элементы холста также будут «увеличивать».
Для панорамирования вы можете скрыть полосы прокрутки в ScrollViewer и использовать событие MouseMove для вызова функции ScrollToHorizontOffset () ScrollViewers для программного перемещения полос прокрутки. Воспользуйтесь ссылкой, которую выложили «Оптимальные решения», это именно то, как это сделать.
Если бы я был на своем компьютере разработчика, я мог бы дать вам пример кода.