Como manter a área da tela centralizada em um ScrollViewer quando aumenta ou diminui o zoom, e nem tudo pode ser exibido na janela de visualização

Todos

Tenho um aplicativo WPF que possui uma tela que envolvi em um visualizador de rolagem. Eu tenho um controle deslizante na barra de status que permite ao usuário aumentar e diminuir o zoom (assim como o mspaint do Win 7

Aqui estão alguns dos XAML:

<ScrollViewer Name="Map"
              VerticalScrollBarVisibility="Auto"
              HorizontalScrollBarVisibility="Auto">
    <Canvas x:Name="WallsCanvas" Height="800" Width="1000" ClipToBounds="True">
        <Canvas.LayoutTransform>
            <ScaleTransform x:Name="WallsCanvasScale"
                            ScaleX="1" ScaleY="1" />
        </Canvas.LayoutTransform>
    </Canvas>
</ScrollViewer>

Quando eu aumentar o zoom e as barras de rolagem estiverem visíveis, as barras de rolagem, não importa onde estejam definidas, pularão para o mei

É exatamente como se o valor das barras de rolagem permanecesse o mesmo, mas o valor máximo aumentass

O que posso fazer para que eles digam ... digamos, se eles estavam no canto inferior direito, para permanecer no canto inferior direito depois de aumentar ou diminuir o zoom?

BTT, aqui está o meu código de zoom in e out:

private void SliderValueChanged(object sender, RoutedPropertyChangedEventArgs<double> 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;
}

Então, nenhuma ciência de foguetes no meu código, mas ...

Ideia de atualização: se eu tivesse acesso ao valor e ao valor máximo das barras de rolagem, poderia obter a porcentagem entre os dois e depois do zoom (escala) eu poderia reaplicar o valor da barra de rolagem como uma porcentagem da Valor máximo????? Mas onde estão o valor e o valor máximo disponíveis?

Qualquer ajuda seria apreciada. Não consigo pensar que sou o único com esse problema, já que o MSPaint (versão do Windows 7) funciona corretamente e presumo que seja um aplicativo XAM

Aqui está umligaçã (http://www.leesaunders.net/examples/zoomexample/zoomexample.zip) em um projeto de exemplo de trabalho mínimo (VS 2010). Ao executá-lo, basta mover as barras de rolagem e, em seguida, aumentar o zoom, você verá o problema imediatament

questionAnswers(1)

yourAnswerToTheQuestion