使用Obscure和UnObscure ......我这样做了吗?

时间:2011-12-24 06:04:00

标签: silverlight-4.0 windows-phone-7.1 windows-phone-7

WP 7.5应用程序。我有两个故事板动画 - 一个在图像上,另一个在文本上。

问题1:当我转到下一页并返回时,图像和文字会闪烁。

解决方案1:所以我添加了OnNavigateFrom并明确停止了动画,并将动画中涉及的所有属性重置为0.

问题2:现在说屏幕进入锁定模式,当我解锁时,由于我在OnNavigatedFrom中将我的一个元素的不透明度设置为0,因此隐藏了元素,实际应该是可见的直到用户移动到下一页。

解决方案2:我在代码中处理了Obscured和UnObscured处理程序,如下所示,并添加了一个标志,以查看应用程序是否将进入模糊模式,不停止动画或重置属性。

public class Page2 :PhoneApplicationPage
    {
         private bool _isObscured = false;
         public Page2()
        {
            (Application.Current as App).RootFrame.Obscured += OnObscured;
            (Application.Current as App).RootFrame.Unobscured += OnUnobscured;
            InitializeComponent();
        }

        protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
        {
            //Stop animations and reset properties only if not going to obscure mode.
            if (!_isObscured)
            {
                //stop animaiton
                Storyboard1.Stop();
                Storyboard2.Stop();
                //Reset all transform properties to 0
                Text1.Opacity = 0;
                Image1.RenderTransform.SetValue(CompositeTransform.ScaleXProperty, 0.0);
                Image1.RenderTransform.SetValue(CompositeTransform.ScaleYProperty, 0.0);
            }
            base.OnNavigatedFrom(e);
        }

        void OnObscured(object sender, ObscuredEventArgs e)
        {
            Storyboard1.Pause();
            Storyboard2.Pause();
            _isObscured = true;
        }

        void OnUnobscured(object sender, EventArgs e)
        {
            Storyboard1.Resume();
            Storyboard2.Resume();
            _isObscured = true;
        }
    }

问题:这是正确的方法还是有更好的方法?这样做会有任何认证问题吗?

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:0)

更简单的方法是添加IsLeave布尔属性,并在调用NavigateTo方法的点击事件中将其设置为true。另外,也可以在同一个功能中停止动画。

您可以确定,当您回来时,IsLeave属性会说您要执行动画。

private bool IsLeave = false;

 OnNavigatedTo()
 {
      if (IsLeave)
      {
           //We come back. Reset animations
           IsLeave = false;
      }
 }

 ClickEvent()
 {
      IsLeave = true;
      //Permorm all you need with animations. We leave this page
      NavigationService.NavigateTo()
 }