zoukankan      html  css  js  c++  java
  • UWP开发学习笔记1

    导航到页面:

    this.Frame.Navigate(typeof(SecondPage));


    导航进入当前页面时会调用OnNavigatedTo方法;
    导航从当前页面离开时会调用OnNavigatingFrom方法
    导航时传递参数采用:

    this.Frame.Navigate(typeof(SecondPage), "这里是参数");


    接收页面获取参数:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if(e.Parameter!=null && e.Parameter is string)
        {
            tbkMessage.Text = e.Parameter as string;
        }
    
        base.OnNavigatedTo(e);
    }

    管理导航记录
    两个导航按钮:

    <Page.BottomAppBar>
        <AppBar>
            <StackPanel Orientation="Horizontal">
                <AppBarButton Click="OnBack" Label="上一页" Icon="Back"/>
                <AppBarButton Click="OnForward" Label="下一页" Icon="Forward"/>
            </StackPanel>
        </AppBar>
    </Page.BottomAppBar>


    代码:

    private void OnBack(object sender, RoutedEventArgs e)
    {
        if (this.Frame.CanGoBack)
        {
            this.Frame.GoBack();
        }
    }
    
    private void OnForward(object sender, RoutedEventArgs e)
    {
        if (this.Frame.CanGoForward)
        {
            this.Frame.GoForward();
        }
        else
        {
            this.Frame.Navigate(typeof(PageA));
        }
    }

    查看导航模式:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        tbkMessage.Text = "导航模式:" + e.NavigationMode.ToString();
    
        base.OnNavigatedTo(e);
    }

    从PageA跳转到PageB,然后又从PageB跳转到PageC,后面返回时不希望返回PageB,而是直接到PageA,可以在PageC的OnNavigatedTo方法加入以下代码:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var page = this.Frame.BackStack.FirstOrDefault(p => p.SourcePageType == typeof(PageB));
        if (page != null)
        {
            Frame.BackStack.Remove(page);
        }
        base.OnNavigatedTo(e);
    }


    处理手机上的“后退”键:
    添加“Windows Mobile Extensions for the UWP”的引用
    在App类的OnLaunched方法中加入以下代码:

    if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
    {
        Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
    }


    然后添加HardwareButtons_BackPressed方法:

    private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
    {
        Frame rootFrame = Window.Current.Content as Frame;
        if (rootFrame != null)
        {
            if (rootFrame.CanGoBack)
            {
                e.Handled = true;
                rootFrame.GoBack();
            }
        }
    }


    在App类的OnLaunched方法中添加以下代码:
    rootFrame.CacheSize = 2;
    表示缓存两个页面实例
    然后在要缓存的页面的构造函数添加代码:

    public SecondPage()
    {
        this.InitializeComponent();
        this.NavigationCacheMode = NavigationCacheMode.Enabled;
    }


    NavigationCacheMode有三个值类型
    Required:缓存页面,并且每次访问时都重复利用缓存的实例,而不考虑帧的缓存大小。
    Enabled:缓存页面,但当超过帧的缓存大小时放弃缓存的实例。
    Disabled:从不缓存页面,每次访问时创建页面的新实例。

    保存和恢复导航状态
    GetNavigationState:将 Frame 导航历史记录序列化为字符串。
    SetNavigationState:从提供的序列化字符串中读取 Frame 的导航历史记录并还原。
    在App类的OnSuspending方法中加入以下代码:

    private void OnSuspending(object sender, SuspendingEventArgs e)
    {
        var deferral = e.SuspendingOperation.GetDeferral();
    
        Frame rootFrame = Window.Current.Content as Frame;
        string navstate = rootFrame.GetNavigationState();
        var localSettings = ApplicationData.Current.LocalSettings;
        localSettings.Values["nav"] = navstate;
    
        deferral.Complete();
    }

    在OnLaunched方法中加入代码:

    if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
    {
        object value;
        var localSettings = ApplicationData.Current.LocalSettings;
        if (localSettings.Values.TryGetValue("nav", out value))
        {
            rootFrame.SetNavigationState(value as string);
        }
    }
  • 相关阅读:
    六、函数篇
    七、浅拷贝和深拷贝
    五、模块导入方法及常用模块
    四、注释与捕获参数
    三、python对字符串和集合的内存垃圾回收机制
    二、数据类型的常用方法
    一、基本数据类型
    工作必备之正则匹配、grep、sed、awk
    如何检查linux服务器是否被入侵
    linux查看磁盘类型(是否SSD盘)
  • 原文地址:https://www.cnblogs.com/wzwyc/p/10227425.html
Copyright © 2011-2022 走看看