C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。

简介: 原文:C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。 一般我们在开发Windows Phone App,有时会需要修改锁定画面,而锁定画面的程式码又臭又长,若日後还有很多支APP需要使用到这个功能,岂不是要打很多次?所以我们何不创建一个自定义类别,将锁定画面的功能写一次就好了,日後若有其他专案使用到该功能,我们只要引入Class或Dll参考即可。
原文: C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。

一般我们在开发Windows Phone App,有时会需要修改锁定画面,而锁定画面的程式码又臭又长,若日後还有很多支APP需要使用到这个功能,岂不是要打很多次?所以我们何不创建一个自定义类别,将锁定画面的功能写一次就好了,日後若有其他专案使用到该功能,我们只要引入Class或Dll参考即可。

?

本篇文章将引导您自制LockScreen 锁定画面类别,从【网路图片】、【Assets资源】、【UI】设定锁定画面。

?

制作修改锁定画面的APP必须要先修改【WMAppManifest.xml】

参阅 :

C# Windows Phone App 开发,修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。

?

先看如何使用,我们可以透过【Uri】、【WriteableBitmap】、【UIElement】来操作,

Code部分相当的简短,因为我们透过自定义类别来帮我们完成了,此外也可以保持主程式的画面整洁 :

?

   1:  //从Assets中的资源设定锁定画面
   2:  Uri uri = new Uri("Assets/Tiles/FlipCycleTileLarge.png", UriKind.Relative);
   3:  LockScreen.SetBitmap(uri);
   4:  ?
   5:  //从网路图片设定锁定画面
   6:  Uri uri_Net = new Uri("http://ppt.cc/vJH3", UriKind.Absolute);
   7:  LockScreen.SetBitmap(uri_Net);
   8:  ?
   9:  //从UI设定锁定画面
  10:  LockScreen.SetBitmap(LayoutRoot);

?

自定义类别如下,说明一并打在程式码当中,请各位客观慢用 :

?

   1:  public class LockScreen
   2:  {
   3:      //从Uri设定锁定画面
   4:      public async static void SetBitmap(Uri uri ) {
   5:          //若未在WMAppManifest.xml加入Extensions则结束
   6:          if (! await ComfirmDialog()) {
   7:              return;
   8:          }
   9:          //将Uri转换成Bitmap
  10:          BitmapImage bitmapImage = new BitmapImage();
  11:          bitmapImage.CreateOptions = BitmapCreateOptions.None;
  12:          bitmapImage.UriSource = uri;
  13:          bitmapImage.ImageOpened += (s, e) =>
  14:          {
  15:              //载入完成,必须要等到BitmapImage载入完成才能继续,否则等於白做
  16:              WriteableBitmap wbm = new WriteableBitmap((BitmapImage)s);
  17:              //将Bitmap转换成WriteableBitmap
  18:              Uri uri_Net = new Uri(WriteImageToFile(new WriteableBitmap(wbm)), UriKind.Absolute);
  19:              //设定锁定画面
  20:              Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri_Net);
  21:          };
  22:      }
  23:      //从WriteableBitmap设定锁定画面
  24:      public async static void SetBitmap(WriteableBitmap writeableBitmap)
  25:      {
  26:          //若未在WMAppManifest.xml加入Extensions则结束
  27:          if (!await ComfirmDialog())
  28:          {
  29:              return;
  30:          }
  31:          Uri uri_UI = new Uri(WriteImageToFile(writeableBitmap), UriKind.Absolute);
  32:          Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri_UI);
  33:      }
  34:  ?
  35:      //从UIElement设定锁定画面
  36:      public async static void SetBitmap(UIElement uielement)
  37:      {
  38:          //若未在WMAppManifest.xml加入Extensions则结束
  39:          if (!await ComfirmDialog())
  40:          {
  41:              return;
  42:          }
  43:          Uri uri_UI = new Uri(WriteImageToFile(new WriteableBitmap(uielement, null)), UriKind.Absolute);
  44:          Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri_UI);
  45:      }
  46:  ?
  47:      //判断该APP是否已向系统申请修改锁定画面,若为False则未在WMAppManifest.xml加入Extensions
  48:      public async static Task<bool> ComfirmDialog(){
  49:          try
  50:          {
  51:              var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication;
  52:              //若尚未申请
  53:              if (!isProvider)
  54:              {
  55:                  //跳出视窗询问使用者,是否授权该APP可以修改锁定画面
  56:                  var op = await Windows.Phone.System.UserProfile.LockScreenManager.RequestAccessAsync();
  57:                  isProvider = op == Windows.Phone.System.UserProfile.LockScreenRequestResult.Granted;
  58:              }
  59:              return true;
  60:          }
  61:          catch
  62:          {
  63:              Debug.WriteLine("请在WMAppManifest.xml加入Extensions");
  64:              Debug.WriteLine("参阅 : http://ppt.cc/5U07");
  65:              return false;
  66:          }
  67:      }
  68:  ?
  69:      //档案写入Isolate 回传 Uri路径
  70:      private static string WriteImageToFile(WriteableBitmap writeable_bitmap)
  71:      {
  72:          //档名A
  73:          string FileNameA = "/LockScreen/A.jpg";
  74:          //档名B
  75:          string FileNameB = "/LockScreen/B.jpg";
  76:          //最後使用的党名
  77:          string FileName = "";
  78:          try
  79:          {
  80:  ?
  81:              using (IsolatedStorageFile tStorage = IsolatedStorageFile.GetUserStoreForApplication())
  82:              {
  83:                  //宣告存取IsolatedStorageFile的变数
  84:                  var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
  85:  ?
  86:                  //若为第一次A、B都不存在
  87:                  if (!isolatedStorage.FileExists(FileNameA) && !isolatedStorage.FileExists(FileNameB))
  88:                  {
  89:                      //使用其中一个当作档名
  90:                      FileName = FileNameA;
  91:                  }
  92:                  //若A存在则使用B名称来当作写入的档名
  93:                  if (isolatedStorage.FileExists(FileNameA))
  94:                  {
  95:                      //删除A
  96:                      isolatedStorage.DeleteFile(FileNameA);
  97:                      //使用档名B
  98:                      FileName = FileNameB;
  99:                  }
 100:                  //若B存在则使用A名称来当作写入的档名
 101:                  if (isolatedStorage.FileExists(FileNameB))
 102:                  {
 103:                      //删除B
 104:                      isolatedStorage.DeleteFile(FileNameB);
 105:                      //使用档名A
 106:                      FileName = FileNameA;
 107:                  }
 108:  ?
 109:                  //在独立存储区创建档案
 110:                  IsolatedStorageFileStream fileStream = isolatedStorage.CreateFile(FileName);
 111:                  //写入JPG图档,品质为100 (越低图片画质就越低)
 112:                  writeable_bitmap.SaveJpeg(fileStream, writeable_bitmap.PixelWidth, writeable_bitmap.PixelHeight, 0, 100);
 113:                  //关闭IO
 114:                  fileStream.Close();
 115:                  fileStream.Dispose();
 116:                  tStorage.Dispose();
 117:  ?
 118:              }
 119:              //重组新的URI,并回传
 120:              return string.Format("ms-appdata:///local/{0}", FileName);
 121:          }
 122:          catch (Exception ex)
 123:          {
 124:              string tMsg = ex.Message;
 125:              return string.Empty;
 126:          }
 127:      }
 128:  ?
 129:  }

?

如此一来我们就自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面罗!

?

References :

Suki统整出来的自定义类别

C# Windows Phone App 开发,修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。

?

文章中的叙述如有观念不正确错误的部分,欢迎告知指正 谢谢
转载请注明出处,并且附上本篇文章网址 !? 感谢。

SUKI

HOLIESTAR


DotBlogs Tags: C# Change LockScreen Demo how to change LockScreen LockScreen Sample 示范教学 修改 无效 范例程式 锁定画面 锁屏画面

关连文章

C# Windows Phone App 开发,将 【清单型态】 的【ListBox】改为【格状型态】,并使用Binding放入资料。

[笔记]C# Windows Phone App 开发,邀请使用者对APP评分。

C# Windows Phone App 开发,修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。

Windows Phone 使用,改善Windows Phone 将照片同步到SkyDrive云端空间的【相片】、【影片】画质。

目录
相关文章
|
10月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
1259 27
|
8月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
590 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
8月前
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1230 0
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
1328 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
移动开发 定位技术 Android开发
「揭秘高效App的秘密武器」:Kotlin Flow携手ViewModel,打造极致响应式UI体验,你不可不知的技术革新!
【9月更文挑战第12天】随着移动开发领域对响应式编程的需求增加,管理应用程序状态变得至关重要。Jetpack Compose 和 Kotlin Flow 的组合提供了一种优雅的方式处理 UI 状态变化,简化了状态管理。本文探讨如何利用 Kotlin Flow 增强 ViewModel 功能,构建简洁强大的响应式 UI。
424 3
|
前端开发 JavaScript C#
C#开发者的新天地:Blazor如何颠覆传统Web开发,打造下一代交互式UI?
【8月更文挑战第28天】Blazor 是 .NET 生态中的革命性框架,允许使用 C# 和 .NET 构建交互式 Web UI,替代传统 JavaScript。本文通过问答形式深入探讨 Blazor 的基本概念、优势及应用场景,并指导如何开始使用 Blazor。Blazor 支持代码共享、强类型检查和丰富的生态系统,简化 Web 开发流程。通过简单的命令即可创建 Blazor 应用,并利用其组件化和数据绑定特性快速搭建界面。无论对于 .NET 还是 Web 开发者,Blazor 都是一个值得尝试的新选择。
1192 1
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
217 2
|
Windows
【Azure App Service】误删除App Service资源,怎么办?
【Azure App Service】误删除App Service资源,怎么办?
182 2
|
PHP 开发工具 git
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
318 1
|
API 开发工具 UED
在 UWP 中使用 Windows App SDK
【10月更文挑战第17天】在UWP中使用Windows App SDK可增强应用功能和性能。首先了解SDK特性,接着安装Visual Studio 2022及以上版本,并从微软官网下载安装SDK。配置项目时,确保目标版本支持SDK,添加SDK引用后即可使用新API提升应用体验。开发过程中应充分利用调试工具进行测试,确保应用的兼容性和稳定性。
440 0