2017-10-20 54 views
0

我在Canvas上創建了具有彎曲邊緣的Path對象。我希望能夠旋轉它們並在畫布周圍移動它們。但是,當我嘗試應用幾個變換和對象它只能直觀地顯示最後一個。我假設它是因爲變換應用於Path對象的座標,並且僅顯示,但之後未保存。是否可以將RenderTransform應用於實際的UIElements?

所以,如果我可以運行類似:

my_canvas.Children[0].RenderTransform = new TranslateTransform(0, 100); 
my_canvas.Children[0].RenderTransform = new TranslateTransform(0, 150); 

它會向下移動我的Path 150像素。

有沒有一種方法可以保存RenderTransform的變換進度,還是我必須用不同的參數重新創建我的Path /編寫一種方法手動取代像素?

編輯

又如:

my_canvas.Children[0].MouseDown += (object sender, MouseButtonEventArgs e) => 
      { 
       if (e.LeftButton == MouseButtonState.Pressed) 
       { 
        MouseDownLocation = e.GetPosition(my_canvas); 
       } 
      }; 

      my_canvas.Children[0].MouseMove += (object sender, MouseEventArgs e) => 
      { 
       if (e.LeftButton == MouseButtonState.Pressed) 
       {      
        my_canvas.Children[0].RenderTransform = new TranslateTransform(-(MouseDownLocation.X - e.GetPosition(my_canvas).X), -(MouseDownLocation.Y - e.GetPosition(my_canvas).Y));      
       } 
      }; 

此代碼可以讓我將我的元素,它工作得很好:我可以把它撿起來,直觀的移動它,讓它去。但只有一次。如果再試一次,它會嘗試根據元素之前的位置進行轉換。而當我打字時,我意識到我可以通過跟蹤轉換造成的偏移來解決這個問題。

+0

也許[此](https://stackoverflow.com/questions/45208505/is-it-good-practice-to-position-uielements-via-rendertransform)可以幫助你。只需看一看:) – 2017-10-20 20:01:27

+0

將變換分配給UIElement的RenderTransform屬性時,顯然會替換先前分配的值。如果您想一次應用多個轉換,請將它們添加到TransformGroup並將其分配一次到RenderTransform。然後重用TransformGroup的現有元素。請參見[如何將多個變換應用於對象](https://docs.microsoft.com/en-us/dotnet/framework/wpf/graphics-multimedia/how-to-apply-multiple-transforms-to-an -目的)。 – Clemens

+0

@Clemens我希望不僅能夠應用多個變換,而且能夠基於元素最終作爲前一個變換的結果應用它們,如果這樣做有任何意義。爲此,我需要實際更改元素的座標。有沒有一種方法可以實現這一點? –

回答

0

剛下一篇翻譯添加到現有的RenderTransform的X和Y值:

my_canvas.Children[0].RenderTransform = new TranslateTransform(0, 100); 
((TranslateTransform)my_canvas.Children[0].RenderTransform).Y += 150; 

或者使用Canvas.Left和Canvas.Top代替TranslateTransform的:

UIElement element = my_canvas.Children[0]; 
Canvas.SetTop(element, 100); 
Canvas.SetTop(element, Canvas.GetTop(element) + 150); 
+0

是的,謝謝我只是意識到我自己:D –

相關問題