背水一战 Windows 10 (109) - 通知(Tile): 按计划显示 tile 通知, 轮询服务端以更新 tile 通知
2021-04-03 06:26
标签:logo asp.net lin net ntc rem logs event ado [源码下载] Notification/Tile/Schedule.xaml.cs Notification/Tile/Periodic.xaml.cs /WebApi/Controllers/TileContentController.cs(服务端代码) 背水一战 Windows 10 (109) - 通知(Tile): 按计划显示 tile 通知, 轮询服务端以更新 tile 通知 标签:logo asp.net lin net ntc rem logs event ado 原文地址:https://www.cnblogs.com/webabcd/p/9206975.html
作者:webabcd
介绍
背水一战 Windows 10 之 通知(Tile)
示例
1、演示如何按计划显示 tile 通知(在指定的时间显示指定的 tile 通知,此特性在 application tile 和 secondary tile 中均支持)
Notification/Tile/Schedule.xamlPage
x:Class="Windows10.Notification.Tile.Schedule"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Notification.Tile"
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="10 0 10 10">
TextBlock Name="lblMsg" Margin="5" />
ListBox Name="listBox" Width="800" Height="400" Margin="5" HorizontalAlignment="Left">
ListBox.ItemTemplate>
DataTemplate>
StackPanel Orientation="Horizontal">
TextBlock Text="{Binding Id}" VerticalAlignment="Center" />
TextBlock Text="{Binding Tag}" Margin="15 0 0 0" VerticalAlignment="Center" />
HyperlinkButton Name="btnRemoveScheduledTile" Content="删除此 ScheduledTileNotification" Tag="{Binding Id}" Margin="15 0 0 0" Click="btnRemoveScheduledTile_Click" />
StackPanel>
DataTemplate>
ListBox.ItemTemplate>
ListBox>
Button Name="btnAddScheduledTile" Content="添加指定的 ScheduledTileNotification 到指定的 secondary tile 的计划列表中" Click="btnAddScheduledTile_Click" Margin="5" />
StackPanel>
Grid>
Page>
/*
* 演示如何按计划显示 tile 通知(在指定的时间显示指定的 tile 通知,此特性在 application tile 和 secondary tile 中均支持)
*
* ScheduledTileNotification - 按计划显示的 Tile 通知
* Content - Tile 的内容,XmlDocument 类型的数据,只读,其需要在构造函数中指定
* DeliveryTime - 显示 Tile 通知的时间,只读,其需要在构造函数中指定
* ExpirationTime - Tile 通知的过期时间,超过这个时间就会清除这个 Tile
* Id - ScheduledTileNotification 的标识
* Tag - 在启用 tile 的队列功能时,如果 tile 的 Tag 相同则新的内容会更新旧的内容(Tag 值的前 16 个字符相同则认为是相同的 Tag)
* 不指定的 Tag 的话则认为 Tag 都是不同的
*
* TileUpdater - 磁贴的 Tile 更新器
* AddToSchedule() - 将指定的 ScheduledTileNotification 对象添加到计划列表
* RemoveFromSchedule() - 从计划列表中移除指定的 ScheduledTileNotification 对象
* GetScheduledTileNotifications() - 获取全部 ScheduledTileNotification 对象列表
*/
using System;
using System.Collections.Generic;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using Windows.UI.StartScreen;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace Windows10.Notification.Tile
{
public sealed partial class Schedule : Page
{
private const string TILEID = "tile_schedule";
public Schedule()
{
this.InitializeComponent();
}
// 在开始屏幕固定一个 secondary tile 磁贴
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
Uri square150x150Logo = new Uri("ms-appx:///Assets/Square150x150Logo.png");
Uri wide310x150Logo = new Uri("ms-appx:///Assets/Wide310x150Logo.png");
Uri square310x310Logo = new Uri("ms-appx:///Assets/Square310x310Logo.png");
SecondaryTile secondaryTile = new SecondaryTile(TILEID, "name", "arguments", square150x150Logo, TileSize.Wide310x150);
secondaryTile.VisualElements.Wide310x150Logo = wide310x150Logo;
secondaryTile.VisualElements.Square310x310Logo = square310x310Logo;
try
{
bool isPinned = await secondaryTile.RequestCreateAsync();
lblMsg.Text = isPinned ? "固定成功" : "固定失败";
}
catch (Exception ex)
{
lblMsg.Text = "固定失败: " + ex.ToString();
}
ShowScheduledTiles();
}
// 添加指定的 ScheduledTileNotification 到指定的 secondary tile 的计划列表中
private void btnAddScheduledTile_Click(object sender, RoutedEventArgs e)
{
string tileXml = $@"
2、演示如何轮询服务端以更新 tile 通知
Notification/Tile/Periodic.xamlPage
x:Class="Windows10.Notification.Tile.Periodic"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Notification.Tile"
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="10 0 10 10">
TextBlock Name="lblMsg" Margin="5" />
Button Name="btnStartPeriodicUpdate" Content="启动一个“轮询服务端获取数据,然后更新 Tile 通知”的任务" Click="btnStartPeriodicUpdate_Click" Margin="5" />
StackPanel>
Grid>
Page>
/*
* 演示如何轮询服务端以更新 tile 通知
*
* TileUpdater - 磁贴的 Tile 更新器
* StartPeriodicUpdate(Uri tileContent, DateTimeOffset startTime, PeriodicUpdateRecurrence requestedInterval) - 启动一个“轮询服务端获取数据,然后更新 Tile 通知”的任务
* StartPeriodicUpdateBatch(IEnumerable
/*
* 用于演示“轮询服务端以更新 tile 通知”的服务端部分
*/
using System;
using System.Net.Http;
using System.Text;
using System.Web.Http;
namespace WebApi.Controllers
{
public class TileContentController : ApiController
{
private Random _random = new Random();
[HttpGet]
public HttpResponseMessage Get()
{
string tileXml = $@"
OK
[源码下载]
文章标题:背水一战 Windows 10 (109) - 通知(Tile): 按计划显示 tile 通知, 轮询服务端以更新 tile 通知
文章链接:http://soscw.com/essay/71708.html