Silverlight 从Canvas TranslateTransform中排除某些元素

Silverlight 从Canvas TranslateTransform中排除某些元素,silverlight,canvas,Silverlight,Canvas,我正在Silverlight 5中创建一个设计环境,用户可以从屏幕左侧的面板中拖放一些项目。用户还可以通过鼠标和滚动条缩放/平移场景。Canvas有一个TranslateTransform,在平移场景时对其进行操作,但我不希望平移UI元素。如何使这些元素不受平移过程的影响 我在XAML中使用以下画布转换: <Canvas.RenderTransform> <TransformGroup x:Name="transformGroup">

我正在Silverlight 5中创建一个设计环境,用户可以从屏幕左侧的面板中拖放一些项目。用户还可以通过鼠标和滚动条缩放/平移场景。Canvas有一个TranslateTransform,在平移场景时对其进行操作,但我不希望平移UI元素。如何使这些元素不受平移过程的影响

我在XAML中使用以下画布转换:

        <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元素。

啊,好的,现在我想我知道你的意思了,您想要做的事情非常简单,只需使用
DOM
中对象的组织来反映您想要的结构即可完成。因此,在您的情况下,应该是这样的(以pseudo为例)


然后,通过这种方式,您基本上只需将这些UI元素浮动到
DOM
树中的其他元素上,就可以实现您想要的效果


希望这有帮助,干杯

听起来是个有趣的项目,但很难想象你的意思?你是说你只是想(举例来说)让一些按钮和随机用户界面的东西保持不变,而它们下面的画布的东西则分别做它们的事情吗?是的,你可以想象我的应用程序类似MS Paint,我有一些标准用户界面(状态栏、工具栏和…)和一个用户可以绘制的场景。当用户平移场景时,UI对象应该保持不变,这怎么可能?谢谢Chris,我会尝试一下,并让你知道结果。不用担心,兄弟,如果没有,请让我知道,我们将以任何方式为你排序。祝你周末愉快!我已经按照你说的做了测试,但似乎不起作用。用户界面的安排非常混乱。我想我应该只在一张画布上工作。有没有办法从Canvas TranslateTransform中排除某些元素?或者是否有可能在某些元素上消除转换?我必须看看你在做什么才能给出更准确的想法,但你必须打破转换和UI内容之间的继承关系,通常你只需要使用DOM就可以做到这一点,如我所示。听起来,你如何组织事情可能不是目前为止最好的方法,可能需要一些重构。@Ali_dotNet更新了我的答案,很抱歉,没能早点看到你的回答。同样的概念仍然适用,您只需要分离
画布
和其他内容之间的关联。
<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>