• 创建全局SystemTray.ProgressIndicator


    当处理耗时任务时,我们自然要给个进度指示器让用户看到应用正在做事呢,不然用户就会想到底好没好啊,死了?。所以我们一定要有进度指示器,这样才是一个正常的用户体验。而创建进度指示器的最简单方法就是使用系统托盘里的ProgressIndicator,不过系统托盘和页面是挂钩的,要是用户这时转入其它页面,那ProgressIndicator就没了啊,用户就看不到进度了。所以不管用户做了什么事,ProgressIndicator都要显示出来,就是要做个全局的ProgressIndicator。于是网上搜索一番,找到了个代码,思路是这样的:写一个类,保存ProgressIndicator的相关数据,订阅Frame的Navigating和Navigated,监视页面切换。对移入的页面,利用保存的数据创建一个ProgressIndicator显示出来,对移出的页面,隐藏ProgressIndicator。不过后来想了想,能不能用绑定来实现呢?于是试了一下,果真可以。下面是相关代码:

    using System;
    using System.ComponentModel;
    namespace *.ViewModels
    {
        public class ProgressIndicatorViewModel : INotifyPropertyChanged
        {
            private Boolean isVisible;
            private String text;
            private Boolean isIndeterminate;
            private Double value;
    
            /// <summary>
            /// 获取或设置 是否显示ProgressIndicator。
            /// </summary>
            public Boolean IsVisible
            {
                get
                {
                    return isVisible;
                }
                set
                {
                    if (isVisible != value)
                    {
                        isVisible = value;
                        NotifyPropertyChanged("IsVisible");
                    }
                }
            }
            /// <summary>
            /// 获取或设置 显示的文字。
            /// </summary>
            public String Text
            {
                get
                {
                    return text;
                }
                set
                {
                    if (text != value)
                    {
                        text = value;
                        NotifyPropertyChanged("Text");
                    }
                }
            }
            /// <summary>
            /// 获取或设置 进度指示器是不确定的还是确定的。
            /// </summary>
            public Boolean IsIndeterminate
            {
                get
                {
                    return isIndeterminate;
                }
                set
                {
                    if (isIndeterminate != value)
                    {
                        isIndeterminate = value;
                        NotifyPropertyChanged("IsIndeterminate");
                    }
                }
            }
            /// <summary>
            /// 获取或设置 进度(0-1)。
            /// </summary>
            public Double Value
            {
                get
                {
                    return value;
                }
                set
                {
                    if (this.value != value)
                    {
                        this.value = value;
                        NotifyPropertyChanged("Value");
                    }
                }
            }
    
            public ProgressIndicatorViewModel()
            {
                isVisible = false;
                text = String.Empty;
                isIndeterminate = false;
                value = 0;
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
            private void NotifyPropertyChanged(String propertyName)
            {
                if (null != PropertyChanged)
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    <phone:PhoneApplicationPage
        shell:SystemTray.Opacity="0"
        shell:SystemTray.IsVisible="{Binding IsVisible}">
        
        <shell:SystemTray.ProgressIndicator>
            <shell:ProgressIndicator IsVisible="{Binding IsVisible}"
                                     Text="{Binding Text}"
                                     IsIndeterminate="{Binding IsIndeterminate}"
                                     Value="{Binding Value}"/>
        </shell:SystemTray.ProgressIndicator>
    
        <Grid>
        </Grid>
    
    </phone:PhoneApplicationPage>
  • 相关阅读:
    Maven打jar包
    windows关闭占用某端口的进程
    windows系统下发布python模块到pypi
    【转】vmware 安装 osx 无法登录 appstore 的解决办法 (伪造smbios设备信息)
    【转】Java并发编程:volatile关键字解析
    自定义JSP标签
    不一样的ssm
    eclipse制作exe文件
    ftp服务器搭建及简单操作
    OC中的socket通信
  • 原文地址:https://www.cnblogs.com/rainstorm/p/3051058.html
Copyright © 2020-2023  润新知