重新想象 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 protected]"; // 组织者的地址(不能超过 321 字符)
            // 指定约会的组织者
            appointment.Organizer = organizer;

            // 约会参与者
            var invitee = new AppointmentInvitee();
            invitee.DisplayName = "abc"; // 约会参与者的显示名称(不能超过 255 字符)
            invitee.Address = "[email protected]"; // 约会参与者的地址(不能超过 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
[源码下载]

时间: 2024-10-12 07:20:14

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

重新想象 Windows 8.1 Store Apps 系列文章索引

[源码下载] [重新想象 Windows 8 Store Apps 系列文章] 作者:webabcd 1.重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar 介绍重新想象 Windows 8.1 Store Apps 之新增控件 AppBar - 应用程序栏控件(新增了 AppBarButton, AppBarToggleButton, AppBarSeparator) CommandBar - 应用程序栏控件(AppBar 简

重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

[源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性 作者:webabcd介绍重新想象 Windows 8.1 Store Apps 之控件增强 文本类控件的增强 为一些控件增加了 Header 属性和 HeaderTemplate 属性 为一些控件增加了 PlaceholderText 属性 示例1.演示

重新想象 Windows 8.1 Store Apps (82) - 绑定: DataContextChanged, TargetNullValue, FallbackValue, UpdateSourceTrigger

[源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之绑定 DataContextChanged - FrameworkElement 的 DataContext 发生变化时触发的事件 TargetNullValue - 当绑定数据为 null 时所需要显示的值 FallbackValue - 当绑定失败(无法返回值)的时候所需要显示的值 UpdateSourceTrigger - UI 上数据更新的触发方式 示例1.演示 DataContextCha

重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar

[源码下载] 重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar 作者:webabcd介绍重新想象 Windows 8.1 Store Apps 之新增控件 AppBar - 应用程序栏控件(新增了 AppBarButton, AppBarToggleButton, AppBarSeparator) CommandBar - 应用程序栏控件(AppBar 简化版) 示例1.演示 AppBar 的应用AppBarDemo.xaml

重新想象 Windows 8.1 Store Apps (86) - 系统 UI 的新特性: Theme, 窗口宽度大小可变, ApplicationView, DisplayInformation

[源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之系统 UI 的新特性 Theme - 主题(共有两种主题:Light 和 Dark,默认是 Dark) 窗口宽度可调 ApplicationView DisplayInformation 示例1.Theme - 主题(共有两种主题:Light 和 Dark,默认是 Dark)Theme.xaml <Page x:Class="Windows81.UI.Theme" xmlns=&qu

重新想象 Windows 8.1 Store Apps (83) - 文件系统的新特性

[源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之文件系统的新特性 简要说明 win8.1 中关于文件系统的增强 “库”管理 管理以及使用索引 示例1.简要说明 win8.1 中关于文件系统的增强Demo.xaml <Page x:Class="Windows81.FileSystem.Demo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio

重新想象 Windows 8.1 Store Apps (79) - 控件增强: MediaElement, Frame

[源码下载] 重新想象 Windows 8.1 Store Apps (79) - 控件增强: MediaElement, Frame 作者:webabcd介绍重新想象 Windows 8.1 Store Apps 之控件增强 MediaElement - 播放视频或音频的控件 Frame - 框架控件,用于导航内容 示例1.演示 MediaElement 的新特性MediaElementDemo.xaml <Page x:Class="Windows81.Controls.MediaEl

重新想象 Windows 8.1 Store Apps (78) - 控件增强: ScrollViewer, FlipView, Popup

[源码下载] 重新想象 Windows 8.1 Store Apps (78) - 控件增强: ScrollViewer, FlipView, Popup 作者:webabcd介绍重新想象 Windows 8.1 Store Apps 之控件增强 ScrollViewer - 滚动视图控件的增强 FlipView - 滑动视图控件的增强 Popup - 弹出框控件的增强 示例1.演示 ScrollViewer 的新特性ScrollViewerDemo.xaml <Page x:Class="

重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性

[源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之后台任务的新特性 下载和上传的新特性 程序启动前预下载网络资源 后台任务的其它新特性 示例1.本例用于说明 win8.1 中后台下载和上传的新特性(本例用后台下载说明,后台上传与此类似)TransferNew.xaml <Page x:Class="Windows81.BackgroundTask.TransferNew" xmlns="http://schemas.mic