locked
Анимация, проблема с координатами. RRS feed

  • Вопрос

  • Здравствуйте, хочу сделать, чтобы при flick влево, на экран вылезал прямоугольник.

    <Rectangle x:Name="rec" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="758" Stroke="Black" VerticalAlignment="Top" Width="240" Grid.RowSpan="2" RenderTransformOrigin="0.5,0.5">
            	<Rectangle.RenderTransform>
            		<CompositeTransform/>
            	</Rectangle.RenderTransform>
            </Rectangle>
            void listener_DragStarted(object sender, DragStartedGestureEventArgs e)
            {
                //throw new NotImplementedException();
                X = e.GetPosition(LayoutRoot).X;
            }
    
            void listener_DragDelta(object sender, DragDeltaGestureEventArgs e)
            {
                //throw new NotImplementedException();
                System.Windows.Thickness location = new System.Windows.Thickness(e.GetPosition(LayoutRoot).X, rec.Margin.Top, 0, 0);
                rec.Margin = location;
            }
    
            void listener_DragCompleted(object sender, DragCompletedGestureEventArgs e)
            {
                //throw new NotImplementedException();
                Y = e.GetPosition(LayoutRoot).X;
    
                Storyboard st = new Storyboard();
                
                DoubleAnimation anim = new DoubleAnimation();
                anim.From = 0;
                anim.To = 240 - Y;
                anim.Duration = TimeSpan.FromSeconds(1);
    
                Storyboard.SetTarget(anim, rec);
                Storyboard.SetTargetProperty(anim, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));
                st.Children.Add(anim);
    
                st.Begin();
            }
    В первый раз все работает правильно, а вот когда я делаю данный жест снова, то прямоугольник во время DragDelta находится от тапа на значение anim.To(возможно) правее. Потом в DragCompleted прямоугольник перемещается в место тапа, и оттуда уже начинает анимацию. Как можно избавиться от этой проблемы?

    19 июля 2013 г. 7:40

Ответы

  • Надо было подписаться на Storyboard.Completed и там вызывать Storyboard.Stop();

    • Помечено в качестве ответа rinatd 20 июля 2013 г. 10:18
    20 июля 2013 г. 10:17