重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 原文:重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片[源码下载] 重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片 作者:webabcd介绍重新想象 Windows 8.
原文: 重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片

[源码下载]


重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片



作者:webabcd


介绍
重新想象 Windows 8.1 Store Apps 之其他新特性

  • CoreDispatcher 的新特性
  • “日历”的相关操作
  • 自定义锁屏时需要显示的系列图片



示例
1、演示 CoreDispatcher 在 win8.1 中的新特性
CoreDispatcherDemo.xaml.cs

/*
 * 演示 CoreDispatcher 在 win8.1 中的新特性
 * 
 * 关于几个 Core 的基础请参见:http://www.cnblogs.com/webabcd/archive/2013/11/11/3417379.html
 */

using System;
using Windows.UI.Xaml.Controls;

namespace Windows81.Other
{
    public sealed partial class CoreDispatcherDemo : Page
    {
        public CoreDispatcherDemo()
        {
            this.InitializeComponent();

            this.Loaded += CoreDispatcherDemo_Loaded;
        }

        async void CoreDispatcherDemo_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            // CoreDispatcher - 消息调度器
            Windows.UI.Core.CoreDispatcher coreDispatcher = Windows.UI.Xaml.Window.Current.Dispatcher;

            // 优先级从高到低排序:
            // 1、本地代码中的 SendMessage
            // 2、CoreDispatcherPriority.High
            // 3、CoreDispatcherPriority.Normal
            // 4、所有设备输入消息
            // 5、CoreDispatcherPriority.Low
            // 6、CoreDispatcherPriority.Idle(一般用于后台任务)
            await coreDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () =>
            {
                // 调用 coreDispatcher 所在的线程
            });



            // 以下为 win8.1 新增 

            // 获取或设置当前 CoreDispatcher 的优先级
            // coreDispatcher.CurrentPriority

            // 当前 CoreDispatcher 中的任务是否需要让步(即任务队列中是否存在更高优先级的任务,或指定的优先级及其以上的任务)
            // coreDispatcher.ShouldYield()
            // coreDispatcher.ShouldYield(CoreDispatcherPriority priority)
        }
    }
}


2、演示“日历”的相关操作
AppointmentDemo.xaml

<Page
    x:Class="Windows81.Other.AppointmentDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows81.Other"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">

            <TextBlock Name="lblMsg" FontSize="14.667" />
            
            <Button Name="btnAddAppointment" Content="add appointment" Click="btnAddAppointment_Click" Margin="0 10 0 0" />

            <Button Name="btnShowAppointment" Content="show appointment" Click="btnShowAppointment_Click" Margin="0 10 0 0" />

        </StackPanel>
    </Grid>
</Page>

AppointmentDemo.xaml.cs

/*
 * 演示“日历”的相关操作
 */

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.ApplicationModel.Appointments;
using Windows.Foundation;
using Windows.UI.Xaml.Media;

namespace Windows81.Other
{
    public sealed partial class AppointmentDemo : Page
    {
        public AppointmentDemo()
        {
            this.InitializeComponent();
        }

        private async void btnAddAppointment_Click(object sender, RoutedEventArgs e)
        {
            // 实例化一个 Appointment 对象
            var appointment = new Appointment();

            // 约会的开始时间
            var startTime = new DateTimeOffset(2015, 2, 14, 10, 10, 0, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now));
            appointment.StartTime = startTime;

            // 约会的主题(不能超过 255 字符)
            appointment.Subject = "情人节约会";

            // 约会的地点(不能超过 32768 字符)
            appointment.Location = "家里";

            // 约会的详细内容(不能超过 1073741823 字符)
            appointment.Details = "在家里做方便面吃,庆祝情人节";

            // 约会的持续时间
            appointment.Duration = TimeSpan.FromMinutes(30);

            // 约会是否会持续一整天
            appointment.AllDay = false;

            // 提醒(提醒时间点为:约会开始时间减去此属性指定的时间),如果此属性设置为 null 则不提醒
            appointment.Reminder = TimeSpan.FromMinutes(15);

            // 约会参与者的繁忙状态(AppointmentBusyStatus 枚举)
            appointment.BusyStatus = AppointmentBusyStatus.Free;

            // 约会的隐私程度(AppointmentSensitivity 枚举:Public, Private)
            appointment.Sensitivity = AppointmentSensitivity.Private;

            // Uri
            appointment.Uri = new System.Uri("http://webabcd.cnblogs.com");


            // 约会的组织者
            var organizer = new AppointmentOrganizer();
            organizer.DisplayName = "webabcd"; // 组织者的显示名称(不能超过 255 字符)
            organizer.Address = "email@mail.com"; // 组织者的地址(不能超过 321 字符)
            // 指定约会的组织者
            appointment.Organizer = organizer;


            // 约会参与者
            var invitee = new AppointmentInvitee();
            invitee.DisplayName = "abc"; // 约会参与者的显示名称(不能超过 255 字符)
            invitee.Address = "email2@mail.com"; // 约会参与者的地址(不能超过 321 字符)
            invitee.Role = AppointmentParticipantRole.OptionalAttendee; // 约会参与者的赴约选项
            invitee.Response = AppointmentParticipantResponse.Accepted; // 约会参与者的赴约响应
            // 添加一个约会参与者
            // appointment.Invitees.Add(invitee); 


            // 循环约会
            var recurrence = new AppointmentRecurrence();
            recurrence.Unit = AppointmentRecurrenceUnit.Daily; // 循环约会的发生频率(AppointmentRecurrenceUnit 枚举)
            recurrence.Interval = 2; // 循环约会的发生间隔(比如 Unit 为 AppointmentRecurrenceUnit.Daily,Interval 为 2 则代表每两天发生一次)
            recurrence.Occurrences = 10; // 循环约会的循环次数(null 代表不限制)
            recurrence.Until = null; // 循环约会的截止时间(null 代表不限制)
            recurrence.WeekOfMonth = AppointmentWeekOfMonth.First; // 循环约会发生在月中的第几周
            recurrence.DaysOfWeek = AppointmentDaysOfWeek.Sunday | AppointmentDaysOfWeek.Monday; // 循环约会发生在星期几(flags 类型的枚举)
            recurrence.Month = 1; // 约会发生的月
            recurrence.Day = 1; // 约会发生的日
            // 指定循环约会
            // appointment.Recurrence = recurrence;


            var rect = GetElementRect(sender as FrameworkElement);
            // 在指定的位置弹出日历对话框,用于让用户确认是否将相关的约会加入日历(返回值为约会的标识,更新及删除约会都需要用到此标识)
            String appointmentId = await AppointmentManager.ShowAddAppointmentAsync(appointment, rect, Windows.UI.Popups.Placement.Default);
            if (appointmentId != String.Empty) // 约会标识,用于更新和删除约会
            {
                lblMsg.Text = "Appointment Id: " + appointmentId;
            }
            else
            {
                lblMsg.Text = "Appointment not added.";
            }

            // 相关的对话框还有如下几个:
            // await AppointmentManager.ShowReplaceAppointmentAsync(); // 更新约会
            // await AppointmentManager.ShowRemoveAppointmentAsync(); // 删除约会
        }

        private async void btnShowAppointment_Click(object sender, RoutedEventArgs e)
        {
            var dateToShow = new DateTimeOffset(2015, 2, 14, 0, 0, 0, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now));
            var duration = TimeSpan.FromDays(1);

            // 显示指定的时间段内的日历
            //     第一个参数:开始时间
            //     第二个参数:从开始时间计算的时间跨度
            await AppointmentManager.ShowTimeFrameAsync(dateToShow, duration);
        }

        private Rect GetElementRect(FrameworkElement element)
        {
            GeneralTransform buttonTransform = element.TransformToVisual(null);
            Point point = buttonTransform.TransformPoint(new Point());
            return new Rect(point, new Size(element.ActualWidth, element.ActualHeight));
        }
    }
}


3、演示如何自定义锁屏时需要显示的系列图片(需要指定一个 rss 文件地址)
LockScreenWallpapers.xaml.cs

/*
 * 演示如何自定义锁屏时需要显示的系列图片(需要指定一个 rss 文件地址)
 * 
 * 
 * 关于设置和获取锁屏单张图片,请参见:http://www.cnblogs.com/webabcd/archive/2013/09/12/3316073.html
 * 
 * 
 * 注:
 * 1、本例使用的 rss 文件请参见:WebServer 项目下的 wallpapers.xml 文件
 * 2、在“设置”->“锁屏界面”中可以设置是否打开锁屏图片的幻灯片显示,其中幻灯片图片提供者的名字是 rss 文件中的 title
 */

using System;
using Windows.System.UserProfile;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace Windows81.Other
{
    public sealed partial class LockScreenWallpapers : Page
    {
        public LockScreenWallpapers()
        {
            this.InitializeComponent();
        }

        private async void btnDemo_Click(object sender, RoutedEventArgs e)
        {
            // 指定锁屏系列图片的数据源(一个 rss 数据),并弹出对话框让用户确认
            SetImageFeedResult result = await LockScreen.RequestSetImageFeedAsync(new Uri("http://localhost:39630/wallpapers.xml"));
            if (result == SetImageFeedResult.Success)
            {
                lblMsg.Text = "指定的 url 已经被设置为锁屏系列图片的数据源";
            }
            else if (result == SetImageFeedResult.ChangeDisabled)
            {
                lblMsg.Text = "安全策略不允许显示锁屏系列图片";
            }
            else if (result == SetImageFeedResult.UserCanceled)
            {
                lblMsg.Text = "用户取消了";
            }

            // 取消锁屏系列图片
            // LockScreen.TryRemoveImageFeed();
        }
    }
}



OK
[源码下载]

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
158 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
130 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
2月前
|
开发框架 缓存 搜索推荐
PiliPala:开源项目真香,B站用户狂喜!这个开源APP竟能自定义主题+去广告?PiliPala隐藏功能大揭秘
嗨,大家好,我是小华同学。PiliPala 是一个基于 Flutter 开发的 BiliBili 第三方客户端,提供流畅、个性化的使用体验。核心功能包括视频浏览与推荐、用户互动、丰富的播放设置、多维度搜索和个性化主题等。相比官方客户端,PiliPala 功能更丰富、性能更优、界面更美观。
163 14
|
5月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
87 11
|
6月前
|
移动开发 小程序 测试技术
自定义多级联动选择器指南(uni-app)
在本文中,探讨了如何在uni-app中创建自定义多级联动选择器组件。这个组件具有强大的多端支持,可适用于H5、APP、微信小程序、支付宝小程序等多种平台。
390 1
自定义多级联动选择器指南(uni-app)
|
6月前
|
JavaScript 前端开发 UED
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
425 9
|
8月前
|
Java 应用服务中间件 开发工具
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
|
8月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
|
8月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
|
8月前
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.

热门文章

最新文章