Silverlight:在ScaleTransform之后居中

时间:2010-02-23 20:10:36

标签: silverlight

我从这篇文章中了解了如何在ScrollViewer中缩放元素之后显示ScrollViewer的滚动条:http://www.eightyeightpercentnerd.dreamhosters.com/?p=92

现在,我正在尝试将缩放对象(在这种情况下为画布)在ScrollViewer中正确居中。我将让图像在这里讲述我的故事(请在Screencast.com清除我的文件之前帮助我)。 ;

我的XAML:

<ScrollViewer x:Name="ScrollViewer" VerticalAlignment="Top"
    VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
    Width="300" Height="300" Margin="0" Padding="0" Background="White">

    <Canvas x:Name="DesignSurface" Background="Red">

        <Canvas x:Name="Surface" Background="Blue" Height="100" Width="100">
            <Canvas.RenderTransform>
                <TransformGroup>
                    <ScaleTransform x:Name="SurfaceScaleTransform" />
                </TransformGroup>
            </Canvas.RenderTransform>
            <!-- ... -->
        </Canvas>

    </Canvas>

</ScrollViewer>

在初始加载时,我的蓝色画布居中并且为100%: alt text

减少50%后,蓝色画布仍然居中: alt text

增加400%并滚动显示蓝色画布的左上角: alt text

增加400%并滚动显示蓝色画布的右下角: alt text

所以我的问题是如何让蓝色画布在ScrollViewer或红色画布中正确居中?或者其他什么?

1 个答案:

答案 0 :(得分:5)

也许我弄错了你,但你尝试过将RenderTransformOrigin设置为Canvas吗? E.g:

    <Canvas x:Name="Surface" Background="Blue" Height="100" Width="100" 
            RenderTransformOrigin="0.5, 0.5">
        <Canvas.RenderTransform>
            <TransformGroup>
                <ScaleTransform x:Name="SurfaceScaleTransform" />
            </TransformGroup>
        </Canvas.RenderTransform>
        <!-- ... -->
    </Canvas>