带有画布和scrollview的Silverlight缩放区域

时间:2011-02-13 03:15:58

标签: c# .net silverlight

我有简单的画布和项目,我需要添加滚动视图作为我的画布的父级。 但是我在设定

之后遇到了问题
canvas.RenderTransform=new ScaleTransform(){...}

Scroolbars未出现或工作不正确。 会对任何信息感到高兴。

1 个答案:

答案 0 :(得分:7)

渲染转换在UI渲染过程中发生得更晚。它最终对控件渲染执行矩阵变换。滚动查看器将完全不知道此变换,其滚动条将基于原始画布的未变换大小。

silverlight工具包包含LayoutTransformer控件。此控件将变换应用于其内容,作为布局过程的一部分,并将变换后的大小报告为所需的大小。

考虑一下: -

    <ScrollViewer Width="200" Height="200" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <toolkit:LayoutTransformer>
            <toolkit:LayoutTransformer.LayoutTransform>
                <ScaleTransform ScaleX="2" ScaleY="2" />
            </toolkit:LayoutTransformer.LayoutTransform>
            <Canvas Width="150" Height="150" Background="Aquamarine">
                <Rectangle Fill="Blue" Canvas.Top="10" Canvas.Left="10" Width="30" Height="30" />
            </Canvas>
        </toolkit:LayoutTransformer>
    </ScrollViewer>

虽然Canvas的大小(150)小于包含滚动查看器(200),但它被缩放以使其更大(300)。 LayoutTransformer报告其所需大小为300,即画布的后变换大小。因此,ScrollViewer显示滚动条以容纳它。如果没有LayoutTransformer ScrollViewer的好处,{{1}}只会看到Canvas的大小为150,尽管已经应用了RenderTransform。