2014-01-21 5 views
0

Я пытаюсь создать раскадровку, которая масштабирует и перемещает элемент в определенную позицию. Основная идея состоит в том, что есть строка из 6 маленьких карточек, щелкнув по одному, увеличится более подробное изображение, начиная с позиции и размера маленькой карты и заканчивая большой центрированной картой.Одновременное масштабирование и перемещение объекта

Карточка не попадает в позицию X, Y, которую я указываю, я считаю, потому что scaletransform также перемещает ее. Я видел, что matrixtransform может работать, но не мог заставить его работать, по крайней мере, в 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

Я нашел решение, панель с увеличенной карты не имеют горизонтальный/vertical alignment, я установил его влево/вправо, использовал CenterX/CenterY of 0, а движения теперь пиксель отлично

Смежные вопросы