当前位置:编程学习 > wap >>

Windows Phone 7 框架和页面

一、Windows Phone 7 框架(PhoneApplicationFrame)和页面(PhoneApplicationPage)
在一个wp7应用程序运行的时候,程序的整个UI架构会由会有一个PhoneApplicationFrame和一个或者多个PhoneApplicationPage组成。PhoneApplicationFrame是一个顶级容器,里面容纳了PhoneApplicationPage,一个程序里面只有一个PhoneApplicationFrame,我们在App.xaml.cs里面看到的RootFrame就是当前程序的框架了。
下面的方法会对RootFrame完成初始化操作
        private void InitializePhoneApplication()
        {
            if (phoneApplicationInitialized)
                return;
            RootFrame = new PhoneApplicationFrame();
            RootFrame.Navigated += CompleteInitializePhoneApplication;
            RootFrame.NavigationFailed += RootFrame_NavigationFailed;
            phoneApplicationInitialized = true;
        }

        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
        {
            if (RootVisual != RootFrame)
                RootVisual = RootFrame;
            RootFrame.Navigated -= CompleteInitializePhoneApplication;
        }

 
关于(PhoneApplicationFrame)和(PhoneApplicationPage)的关系可以用下面的一张图来表示

  \


 

二、页面(PhoneApplicationPage)的导航

wp7页面的互相跳转的逻辑是用一个堆栈结构的容器来管理这些页面。如下图

  BackStack 堆栈表示


 

当应用程序中的页面调用 Navigate 时,当前页面会被放到后退堆栈上,并且系统将创建并显示目标页的新实例。当你在应用程序的页面之间进行导航时,系统会将多个条目添加到此堆栈。当页面调用 GoBack 时,或者当用户按手机的“返回”按键时,将放弃当前页面,并将堆栈顶部的页面从后退堆栈中弹出并进行显示。此后退导航会继续弹出并显示,直到堆栈中不再有条目。此时,点按手机的“返回”按键将终止应用程序。
这个堆栈容器我们是可以通过PhoneApplicationPage出操控的,操控的相关方法和属性如下:
属性
BackStack  获取一个 IEnumerable,它用于枚举后退导航历史记录中的条目。 
CanGoBack  获取一个值,该值指示在后退导航历史记录中是否至少存在一个条目。
CanGoForward  获取一个值,该值指示在前进导航历史记录中是否至少存在一个条目。
 
 方法
GoBack  导航到后退导航历史记录中的最新条目;如果后退导航时没有条目,则引发异常。
GoForward  导航到前进导航历史记录中的最新条目,如果前进导航时没有条目,则引发异常。对于Windows Phone,该方法始终引发异常,因为没有前进导航堆栈。 (从 Frame 继承。)
RemoveBackEntry  此方法用于从后退堆栈中移除最近的条目,如果没有要移除的条目,则引发InvalidOperationException。如果您想移除多个项目,则多次调用此方法。此 API 是同步的,因此必须从UI 线程调用。
 
事件
  Navigated  当已找到导航的内容并且内容可用时发生。 (从 Frame 继承。)
  Navigating  当请求新的导航时发生。 (从 Frame 继承。)
  NavigationFailed  在导航到请求的内容过程中遇到错误时发生。 (从 Frame 继承。)
  NavigationStopped  在通过调用 StopLoading()()()() 方法终止导航时发生,或者在当前导航进行过程中请求新的导航时发生。 (从 Frame 继承。)
  Obscured  当 shell chrome 包含帧时发生。 
  OrientationChanged  当 Orientation 属性发生更改时发生。
 
三。下面用跟一个Demo来显示一下获取程序的 框架(PhoneApplicationFrame)和页面(PhoneApplicationPage)
 扩展方法类
Extensions.cs
using System.Windows;
using System.Windows.Media;
using System.Collections.Generic;
using System.Linq;

namespace PageDemo
{
    public static class Extensions
    {
        /// <summary>
        /// 获取该元素的可见树里面所有的子元素
        /// </summary>
        /// <param name="element">可见元素</param>
        public static IEnumerable<DependencyObject> GetVisualDescendants(this DependencyObject element)
        {
            return GetVisualDescendantsAndSelfIterator(element).Skip(1);
        }
        /// <summary>
        /// 获取该元素的可见树里面所有的子元素以及该元素本身
        /// </summary>
        /// <param name="element">可见元素</param>
        public static IEnumerable<DependencyObject> GetVisualDescendantsAndSelfIterator(DependencyObject element)
        {
            Queue<DependencyObject> remaining = new Queue<DependencyObject>();
            remaining.Enqueue(element);

            while (remaining.Count > 0)
            {
                DependencyObject obj = remaining.Dequeue();
                yield return obj;

                foreach (DependencyObject child in obj.GetVisualChildren())
                {
                    remaining.Enqueue(child);
                }
            }
        }
        /// <summary>
        /// 获取该元素的可见树里面下一级的子元素
        /// </summary>
        /// <param name="element">可见元素</param>
        public static IEnumerable<DependencyObject> GetVisualChildren(this DependencyObject element)
        {
            return GetVisualChildrenAndSelfIterator(element).Skip(1);
      &nb

补充:移动开发 , Windows Phone ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,