从Canvas TranslateTransform中排除一些元素

时间:2014-05-16 06:01:44

标签: silverlight canvas

我在Silverlight 5中创建设计环境,用户可以从位于屏幕左侧的面板拖放一些项目。用户还可以通过鼠标和滚动条缩放/平移场景。 Canvas有一个TranslateTransform,它在平移场景时被操纵,但我不希望我的UI元素被淘汰。如何排除这些元素不受平移过程的影响?

我在XAML中使用以下Canvas变换:

        <Canvas.RenderTransform>
            <TransformGroup x:Name="transformGroup">
                <ScaleTransform x:Name="CanvasScale" ScaleX="1.0" ScaleY="1.0"></ScaleTransform>
                <TranslateTransform x:Name="CanvasPan" ></TranslateTransform>
            </TransformGroup>
        </Canvas.RenderTransform>

然后我在代码中更改CanvasScale和CanvasPan来缩放/平移场景,但是所有对象(包括UI元素)都受到影响,我的场景有点复杂,所以我认为最好的(或唯一的)方法是排除UI元素从这些转变。

1 个答案:

答案 0 :(得分:1)

好的,现在我认为我知道你的意思,你想要做的事情是非常轻松的,只需使用DOM中的对象组织来反映你想要的结构就可以完成。所以在你的情况下它会是这样的(以伪为例)

<Grid>
              <!-- Your Canvas -->
   <Canvas>
      <Canvas.RenderTransform>
         <TransformGroup x:Name="transformGroup">
            <ScaleTransform x:Name="CanvasScale" ScaleX="1.0" ScaleY="1.0"/>
            <TranslateTransform x:Name="CanvasPan"/>
         </TransformGroup>
      </Canvas.RenderTransform>
   </Canvas>

             <!-- Your UI elements -->
   <StackPanel Orientation="Horizontal">
      <Button/>
      <TextBlox/>
      <CheckBox/>
   </StackPanel>

</Grid>

然后通过这种方式,您基本上只是将这些UI元素浮动到DOM树中的其他内容上,从而为您提供所需的效果。

希望这会有所帮助,欢呼。