2012-07-25 22 views
0

我是WP7/Silverlight/C#編程的新手,我正在製作一個簡單的放大應用程序來處理一些事情。爲了提供「放大」和「縮小」功能,我成功​​地在UIElement上使用了包含視頻饋送的ScaleTransform。將多個變換應用到UI元素

由於我進一步開發了應用程序,我意識到我希望在應用程序的使用過程中適應方向的變化,並確保視頻饋送作出相應響應(該應用程序已在橫向模式下修復,但用戶可能希望'由於某種原因翻過手機)。爲了解決這個問題,我創建並應用了一個RotateTransform並鏈接到了OrientationChanged事件中。

所有這些工作正常,但當我嘗試縮放(使用ScaleTransform)後,我已經改變了方向,然後視頻輸入放大,但翻轉反饋到'默認'的方向,因此顯示顛倒。

鑑於此,我認爲我需要在放大時應用這兩種轉換,所以我創建了一個TransformGroup並向其添加了ScaleTransform和RotateTransform。但是縮放功能不適用於此,並且沒有任何轉換似乎應用。

嘗試應用TransformGroup時是否有其他人遇到問題?

我已經在下面提供了一個縮放和定向代碼的片段供參考 - 如果我正在做很長時間的事情,但是請記住我還在學習,請事先道歉。

任何幫助,將不勝感激。 在此先感謝, 克雷格。

UIElement videocontainer; 
RotateTransform rotatetransform = new RotateTransform(); 

void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e) 
     { 
      switch (Orientation) 
      { 
       case PageOrientation.LandscapeLeft: 
        rotatetransform.Angle = 0; 
        break; 
       default: 
        rotatetransform.Angle = 180; 
        break; 
      } 
      rotatetransform.CenterX = 320; 
      rotatetransform.CenterY = 240; 
      videocontainer.RenderTransform = rotatetransform; 

private void ZoomIn_Click(object sender, EventArgs e) 
     { 
      if (zoom < 7) 
      { 
       switch (Orientation) 
       { 
        case PageOrientation.LandscapeLeft: 
         ScaleTransform myscaletransform1 = new ScaleTransform(); 
         myscaletransform1.ScaleX = myscaletransform1.ScaleX * 1.25; 
         myscaletransform1.ScaleY = myscaletransform1.ScaleY * 1.25; 
         myscaletransform1.CenterX = 320; 
         myscaletransform1.CenterY = 240; 
         TransformGroup zoomintranformgroup1 = new TransformGroup(); 
         zoomintranformgroup1.Children.Add(myscaletransform1); 
         zoomintranformgroup1.Children.Add(rotatetransform); 
         videocontainer.RenderTransform = zoomintransformgroup1; 
         zoom++; 
         break; 
        default: 
         ScaleTransform myscaletransform2 = new ScaleTransform(); 
         myscaletransform2.ScaleX = myscaletransform2.ScaleX * 1.25; 
         myscaletransform2.ScaleY = myscaletransform2.ScaleY * 1.25; 
         myscaletransform2.CenterX = 320; 
         myscaletransform2.CenterY = 240; 
         TransformGroup zoomintranformgroup2 = new TransformGroup(); 
         zoomintranformgroup2.Children.Add(myscaletransform2); 
         zoomintranformgroup2.Children.Add(rotatetransform); 
         videocontainer.RenderTransform = zoomintransformgroup2; 
         zoom++; 
         break; 
       } 


      } 
      else 
      { 
       return; 
      } 
     } 

回答

1

您可以使用CompositeTransform類。這個類結合了所有使用的轉換,使事情變得更加簡單。

+0

Fanstastic這個偉大的工作。非常感謝你!。 – Craig 2012-07-26 08:51:04