2014-05-16 60 views
0

我在Silverlight 5中創建設計環境,用戶可以從位於屏幕左側的面板拖放一些項目。用戶也可以通過鼠標和滾動條縮放/平移場景。畫布有一個TranslateTransform,在平移場景時被操作,但我不希望我的UI元素被平移。我如何排除這些元素受到平移過程的影響?從畫布中排除一些元素TranslateTransform

我用下面的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元素。

+0

聽起來像一個有趣的項目,但難以可視化你的意思?你是說你只是想(例如)一些按鈕和隨機UI的東西留下來,而你的帆布下的東西分別做他們的事情? –

+0

是的,你可以想象我的應用程序像MS-Paint,我有一些標準的UI(狀態欄,工具欄和...)以及用戶可以繪製的場景。當用戶平移場景時UI對象應該保持不動,它怎麼可能? –

回答

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> 

那麼這樣你基本上只是漂浮在在DOM樹其他的東西,這些UI元素,讓您的效果,你」重新開始。

希望這會有所幫助,歡呼聲。

+0

謝謝克里斯,我會放棄它,讓你知道結果。 –

+0

不用擔心兄弟,讓我知道如果不是,我們會讓你按任何方式分類。週末愉快! –

+0

我已經測試了這個你說的,但它似乎不工作。用戶界面的安排非常糟糕。我認爲我應該只在一個Canvas上工作。有沒有辦法從Canvas TranslateTransform中排除一些元素?或者是否有可能中和某些元素的轉換? –