2014-01-21 41 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,并且运动现在为像素完美