渲染变换发生在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
将只能看到画布的大小为150,尽管应用了任何RenderTransform。