Ejemplo n.º 1
0
        public PhonePage()
        {
            // Control默认11,系统默认15
            FontSize = 15;
            _param   = _newParam;

            // 原来在OnNavigatedFrom方法中卸载内容以便下次重用,但会造成页面返回时无动画!!!
            // 因此再次加载时需要卸载旧页面的内容!
            // elem.Parent在uno中仍然有效,uwp中因不在可视树无值,通过附加属性记录所属页面!
            var elem = _param.Content as FrameworkElement;

#if UWP
            PhonePage oldPage = PhonePageEx.GetParentPage(elem);
            if (oldPage != null)
            {
                oldPage.Content = null;
            }
            PhonePageEx.SetParentPage(elem, this);
#else
            if (elem.Parent is PhonePage oldPage)
            {
                oldPage.Content = null;
            }
#endif

            Content = elem;
        }
Ejemplo n.º 2
0
 protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
 {
     // UWP页面未缓存,后退时为下一页准备页面参数
     if (e.NavigationMode == NavigationMode.Back)
     {
         _newParam = (PhonePageParameter)e.Parameter;
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 加载页面内容,导航到新页
        /// </summary>
        /// <param name="p_content">页面内容</param>
        public static void Show(IPhonePage p_content)
        {
            if (p_content == null || !(p_content is FrameworkElement))
            {
                throw new Exception("PhonePage内容不是可视元素!");
            }

            // 避免自己导航到自己的情况
            if (SysVisual.RootFrame.Content is PhonePage page &&
                page.Content == p_content)
            {
                return;
            }

            _newParam = new PhonePageParameter(p_content, null);
            SysVisual.RootFrame.Navigate(typeof(PhonePage), _newParam);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 加载页面内容,导航到新页,可异步等待到关闭
        /// </summary>
        /// <param name="p_content">页面内容</param>
        public static Task ShowAsync(IPhonePage p_content)
        {
            if (p_content == null || !(p_content is FrameworkElement))
            {
                throw new Exception("PhonePage内容不是可视元素!");
            }

            // 避免自己导航到自己的情况
            if (SysVisual.RootFrame.Content is PhonePage page &&
                page.Content == p_content)
            {
                return(Task.CompletedTask);
            }

            var taskSrc = new TaskCompletionSource <bool>();

            _newParam = new PhonePageParameter(p_content, taskSrc);
            SysVisual.RootFrame.Navigate(typeof(PhonePage), _newParam);
            return(taskSrc.Task);
        }