silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了利用silverlight的导航控件,实现翻页效果大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

具体思路是: 利用    <PlaneProjection ></PlaneProjection>  对Frame做一个旋转动画。  在ContentFrame_NavigaTing 方法里,记录此时的导航页的图片。 void ContentFrame_NavigaTing(object sender, NavigaTingCancelEventArgs E) {

具体思路是:

  1. 利用    <PlaneProjection ></PlaneProjection>  对Frame做一个旋转动画。
  2.  在ContentFrame_NavigaTing 方法里,记录此时的导航页的图片

      void ContentFrame_NavigaTing(object sender,NavigaTingCancelEventArgs E)
        {
            LastFrameContent = new WriteableBitmap(ContentFrame,null);
        }
并在 ContentFrame_Navigated(object sender,NavigationEventArgs E)方法里赋值给模板页(此时我们叫模板页)

  private void ContentFrame_Navigated(object sender,NavigationEventArgs E)
        {
            FrameMaskImage.source = LastFrameContent;
            FrameStory.begin();
        }

3. 对第二步骤中的图片做从显示到隐藏的动画。

4.对Frame控件做从无到有的动画效果,合起来就是翻页效果了。

具体XMAL文件代码

    <Grid Name="FrameParentPanel" Margin="26,26,0" Grid.Row="2">
                <Grid.Projection>
                    <PlaneProjection ></PlaneProjection>
                </Grid.Projection>
                <navigation:Frame x:Name="ContentFrame" Style="{Staticresource ContentFrameStylE}" 
                              source="/Home" Navigated="ContentFrame_Navigated" NavigationFailed="ContentFrame_NavigationFailed">
                <navigation:Frame.UriMapper>
                  <uriMapper:UriMapper>
                    <uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/>
                    <uriMapper:UriMapping Uri="/{pagename}" MappedUri="/Views/{pagename}.xaml"/>
                  </uriMapper:UriMapper>
                </navigation:Frame.UriMapper>
            </navigation:Frame>

                <!--遮盖层-->
                <Image Name="FrameMaskImage" VerticalAlignment="Top"></Image>
            </Grid>
具提.cs代码

 public partial class MainPage : UserControl
    {
        private Storyboard FrameStory { get; set; }
        private WriteableBitmap LastFrameContent { get; set; }
        private const int RotateLag = 300;
        private const int Rotatetimestep = 50;
        private const int RotateAngleStep = 15;

        public MainPage()
        {
            InitializeComponent();
            this.ContentFrame.NavigaTing += new NavigaTingCancelEventHandler(ContentFrame_NavigaTing);
            InitFrameStory();
        }

        void ContentFrame_NavigaTing(object sender,null);
        }

        void InitFrameStory()
        {
            //旋转动画
            var pageRotateAnimation = new DoubleAnimationUsingKeyFrames();

            for (var i = 0; i <= 12; i++)
            {
                pageRotateAnimation.KeyFrames.Add(new DiscreteDoubleKeyFrame() { Value = RotateAngleStep * (i < 6 ? i : (i - 12)),KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(RotateLag + Rotatetimestep * i)) });
            }

            //遮盖层动画
            var maskAnimation = new ObjectAnimationUsingKeyFrames();
            maskAnimation.KeyFrames.Add(new DiscreteObjectKeyFrame() { Value = Visibility.Visible,KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(0)) });
            maskAnimation.KeyFrames.Add(new DiscreteObjectKeyFrame() { Value = Visibility.Collapsed,KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(RotateLag + Rotatetimestep * 6)) });

            //frame控件动画
            var frameAnimation = new DoubleAnimationUsingKeyFrames();
            frameAnimation.KeyFrames.Add(new DiscreteDoubleKeyFrame() { Value = 0.0,KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(0)) });
            frameAnimation.KeyFrames.Add(new DiscreteDoubleKeyFrame() { Value = 1.0,KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(RotateLag + Rotatetimestep * 6)) });

            FrameStory = new Storyboard();
            FrameStory.Children.Add(pageRotateAnimation);
            FrameStory.Children.Add(maskAnimation);
            FrameStory.Children.Add(frameAnimation);

            Storyboard.SetTarget(pageRotateAnimation,FrameParentPanel.projection);
            Storyboard.SetTarget(maskAnimation,FrameMaskImagE);
            Storyboard.SetTarget(frameAnimation,ContentFramE);
            Storyboard.SetTargetProperty(pageRotateAnimation,new PropertyPath(PlaneProjection.RotationYProperty));
            Storyboard.SetTargetProperty(maskAnimation,new PropertyPath(VisibilityProperty));
            Storyboard.SetTargetProperty(frameAnimation,new PropertyPath(OpacityProperty));
        }

        // After the Frame navigates,ensure the HyperlinkButton represenTing the current page is SELEcted
        private void ContentFrame_Navigated(object sender,NavigationEventArgs E)
        {
            FrameMaskImage.source = LastFrameContent;
            FrameStory.begin();

            foreach (UIElement child in LinksStackPanel.Children)
            {
                HyperlinkButton hb = child as HyperlinkButton;
                if (hb != null && hb.NavigateUri != null)
                {
                    if (hb.NavigateUri.ToString().Equals(e.Uri.ToString()))
                    {
                        VisualStateManager.GoToState(hb,"ActiveLink",truE);
                    }
                    else
                    {
                        VisualStateManager.GoToState(hb,"InactiveLink",truE);
                    }
                }
            }
        }
        // If an error occurs during navigation,show an error window
        private void ContentFrame_NavigationFailed(object sender,NavigationFailedEventArgs E)
        {
            e.Handled = true;
            ChildWindow errorWin = new ErrorWindow(e.Uri);
            errorWin.Show();
        }
    }

大佬总结

以上是大佬教程为你收集整理的利用silverlight的导航控件,实现翻页效果全部内容,希望文章能够帮你解决利用silverlight的导航控件,实现翻页效果所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。