我有简单的画布和项目,我需要添加滚动视图作为我的画布的父级。 但是我在设定
之后遇到了问题canvas.RenderTransform=new ScaleTransform(){...}
Scroolbars未出现或工作不正确。 会对任何信息感到高兴。
答案 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。