2011-02-13 69 views
3

我有简单的画布和项目,我需要添加滚动视图作为我的画布的父项。 但我fased与设置后Silverlight放大画布和滚动视图的区域

canvas.RenderTransform=new ScaleTransform(){...} 

Scroolbars不出现或正常工作没有问题。 对任何信息感到高兴。

回答

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将只能看到Canvas的大小为150,尽管应用了RenderTransform。

+3

你救了我的一天! – Evgeny 2011-02-14 08:58:13