Как сохранить область холста в центре ScrollViewer при увеличении внутри или снаружи, и не все может быть отображено в окне просмотра

Все,

У меня есть приложение WPF с холстом, который я обернул в средство просмотра прокрутки. У меня есть ползунок в строке состояния, который позволяет пользователю увеличивать и уменьшать масштаб (как в Win 7 mspaint).

Вот некоторые из XAML:


    
        
            
        
    

Когда я увеличиваю масштаб и становятся видимыми полосы прокрутки, полосы прокрутки, независимо от того, где они установлены, переходят к середине.

Это как если бы значение полос прокрутки осталось прежним, но максимальное значение увеличилось.

Что я могу сделать, чтобы заставить их ... скажем, если они были в правом нижнем углу, оставаться в правый нижний угол после увеличения или уменьшения?

Кстати, вот мой код увеличения и уменьшения масштаба:

private void SliderValueChanged(object sender, RoutedPropertyChangedEventArgs e)
{
    var scales = new []{.125, .25, .5, 1, 2, 4, 8};
    var scale = scales[(int)((Slider) sender).Value];

    ScaleChanged(scale, WallsCanvasScale);
}

private static void ScaleChanged(double scale, ScaleTransform st)
{
    st.ScaleX = scale;
    st.ScaleY = scale;
}

Итак, в моем коде нет ракетостроения, но ...

Идея обновления: если бы у меня был доступ к значению и максимальному значению полос прокрутки, могу ли я получить процентное соотношение между ними, а затем после масштабирования (масштабирования) я мог бы повторно применить значение полосы прокрутки в процентах от максимального значения ????? Но где это значение и максимальное значение?

Любая помощь будет принята с благодарностью. Я не могу думать, что я единственный, у кого есть эта проблема, поскольку MSPaint (версия для Windows 7) работает правильно, и я предполагаю, что это приложение XAML.

Вот ссылка (http: // www.leesaunders.net/examples/zoomexample/zoomexample.zip) до минимального рабочего примера проекта (VS 2010). Когда вы запустите его, просто переместите полосы прокрутки, а затем увеличьте уровень, вы сразу увидите проблему.

7
задан saunderl 4 July 2011 в 03:16
поделиться