• UWP Windows10开发更新磁贴和动态更新磁贴


    下面将介绍两种方式如何在windows10 uwp开发中如何更新应用磁贴:

    实际上windows的磁贴就是用xml实现的,你只需要创建相应格式的xml就可以实现动态磁贴了

    一,手动更新磁贴

    二,轮询更新磁贴

    【第一种方式】手动更新磁贴

    1. 创建一个文本框和一个按钮,当按钮点击时,磁贴就会显示文本框的文本
    2. 给按钮绑定一个事件,代码如下
    private void changeBtn_Click(object sender, RoutedEventArgs e)
            {
                //获取模板
                var tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare150x150Text01);
                //获取标签名为text的元素值
                var tileAttributes = tileXml.GetElementsByTagName("text");
                //将获取的元素值追加一个值
                tileAttributes[0].AppendChild(tileXml.CreateTextNode(titleBox.Text));
                //创建一个磁贴类,将xml数据填充到磁贴中
                var tileNotification = new TileNotification(tileXml);
                //向磁贴更新
                TileUpdateManager.CreateTileUpdaterForApplication().Update(tileNotification);
            }

    这样,当点击按钮时,应用磁贴就会显示文本框输入的值

    【第二种方式】轮询更新磁贴

    1. 首先你得有台服务器,或者你也可以解析第三方的数据为磁贴xml格式,然后再进行轮询
    2. 下面介绍用MVC做服务器端,然后uwp再每半小时向服务器获取一次数据

    如果你不了解MVC你可以跳过此步骤,然后看下面如何通过网络获取数据

    1. 创建一个MVC项目
    2. 添加一个Hello控制器

    并在控制器的Index默认方法里添加以下数据:

    public ActionResult Index()
            {
                ViewBag.Title = "巴黎发生恐袭";
                ViewBag.Content = "数百人遇难";
                ViewBag.Type = "新闻";
                return View();
            }

    然后再Hello视图中添加Index视图,把布局页模板页什么的勾选去掉,然后新建了一个.cshtml文件,最后你要把Index.cshtml中的所有html数据全部清空替换成以下文档结构

    <tile>
        <visual version="2">
            <binding template="TileSquare150x150Text01" fallback="TileSquareText01">
                <text id="1">@ViewBag.Title</text>
                <text id="2">@ViewBag.Content</text>
                <text id="3">@ViewBag.Type</text>
                <text id="4">@DateTime.Now.ToLongTimeString()</text>
            </binding>
        </visual>
    </tile>

    待会再介绍模板问题

    最后一步,回到UWP项目中,创建一个按钮(当按下这个按钮时,以后磁贴会按照你设定时间进行自动轮询更新),添加一个单击事件事件,添加以下代码:

    private void AutoUpdate_Click(object sender, RoutedEventArgs e)
            {
                //设置一个Uri类型变量保存服务器的xml地址
                var tileContent = new Uri("http://localhost:61341/UWP/Index");
                //设置轮询时间变量为半小时,也可以设置其他时间
                var requestedInterval = PeriodicUpdateRecurrence.HalfHour;
                //创建磁贴更新实例
                var updater = TileUpdateManager.CreateTileUpdaterForApplication();
                //开始轮询更新,传入服务器磁贴xml文件地址和轮询时间
                updater.StartPeriodicUpdate(tileContent, requestedInterval);
            }

    这样一来你的应用就实现了自动磁贴更新的功能。

    下面我们再来讨论一下磁贴模板问题:

    1. 不同磁贴尺寸有不同的格式,你要为每种磁贴同时设置不同模板
    2. 模板有固定格式和不同资源类型,你可以参考:https://msdn.microsoft.com/zh-cn/library/windows/apps/br212859.aspx
    3. 谢谢!
  • 相关阅读:
    display值的作用分别是什么?relative和absolute分别是相对谁定位的?
    CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算?
    position的absolute与fixed共同点与不同点
    .net core实践系列之SSO-同域实现
    .net core实践系列之短信服务-Sikiro.SMS.Job服务的实现
    .net core实践系列之短信服务-Sikiro.SMS.Bus服务的实现
    .net core实践系列之短信服务-Api的SDK的实现与测试
    .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现
    .net core实践系列之短信服务-为什么选择.net core(开篇)
    winserver的consul部署实践与.net core客户端使用(附demo源码)
  • 原文地址:https://www.cnblogs.com/myhalo/p/4995923.html
Copyright © 2020-2023  润新知