2014-01-21 37 views
0

我試圖創建一個縮放並將元素移動到特定位置的故事板。基本的想法是有一排6張小卡片,點擊一張卡片將放大一張更詳細的圖像,從小卡片的位置和大小開始,最後以大卡爲中心。同時縮放和移動項目

該卡不會在我指定的X,Y位置結束,我相信因爲縮放轉換也在移動它。我看到矩陣變換可能會起作用,但至少在WP8中無法實現。這裏是我的原代碼,卡是小卡的起始位置,產品大詳盡卡進行縮放和移動

private void ZoomIn(UIElement item, UIElement card) 
    { 

     // setup 
     var _Scale = new ScaleTransform 
     { 
      ScaleX = 1, 
      ScaleY = 1, 
      CenterX = item.RenderSize.Width/2, 
      CenterY = item.RenderSize.Height/2, 
     }; 

     var transform = card.TransformToVisual(Application.Current.RootVisual as FrameworkElement); 
     Point absolutePosition = transform.Transform(new Point(0, 0)); 

     var _Translate = new TranslateTransform(); 

     var _Group = new TransformGroup(); 
     _Group.Children.Add(_Scale); 
     _Group.Children.Add(_Translate); 
     item.RenderTransform = _Group; 

     // animate 
     var _Storyboard = new Storyboard { }; 

     // scale X 
     var _ScaleAnimateX = new DoubleAnimation 
     { 
      To = 1.0, 
      From=0.5, 
      Duration = TimeSpan.FromSeconds(.25) 
     }; 
     _Storyboard.Children.Add(_ScaleAnimateX); 
     Storyboard.SetTarget(_ScaleAnimateX, _Scale); 
     Storyboard.SetTargetProperty(_ScaleAnimateX, 
      new PropertyPath(ScaleTransform.ScaleXProperty)); 

     // scale Y 
     var _ScaleAnimateY = new DoubleAnimation 
     { 
      To = 1.0, 
      From = 0.5, 
      Duration = TimeSpan.FromSeconds(.25) 
     }; 
     _Storyboard.Children.Add(_ScaleAnimateY); 
     Storyboard.SetTarget(_ScaleAnimateY, _Scale); 
     Storyboard.SetTargetProperty(_ScaleAnimateY, 
      new PropertyPath(ScaleTransform.ScaleYProperty)); 


     // translate (location X) 
     var _TranslateAnimateX = new DoubleAnimation 
     { 
      From = absolutePosition.X, 
      To = 300, 
      Duration = TimeSpan.FromSeconds(.25) 
     }; 
     _Storyboard.Children.Add(_TranslateAnimateX); 
     Storyboard.SetTarget(_TranslateAnimateX, _Translate); 
     Storyboard.SetTargetProperty(_TranslateAnimateX, 
      new PropertyPath(TranslateTransform.XProperty)); 

     // translate (location Y) 
     var _TranslateAnimateY = new DoubleAnimation 
     { 
      From = absolutePosition.Y, 
      To = 40, 
      Duration = TimeSpan.FromSeconds(.25) 
     }; 

     _Storyboard.Begin(); 
    } 
+0

什麼是所有這些卡的容器元素?我們可以得到一個截圖嗎?您現有的佈局很可能與您的轉換衝突。 –

+0

一定在c#中還是在.xaml中也會這樣呢? –

+0

主遊戲板和卡片處於一個複雜的網格結構中,但大型全屏幕堆疊面板中的大型「縮放」卡片全部都在它自己的上面,所以它可以在任何地方移動,它只是不會結束於X ,YI指定 – Jason

回答

0

我找到了解決辦法,與縮放卡的面板不具備水平/垂直對齊,我將它設置爲左/頂部,使用CenterX/CenterY爲0,並且運動現在爲像素完美