个人资料

跳过导航链接首页 > 博客列表 > 博客正文

UWP让用户选择一张图片作为APP界面壁纸

分类:

引子:

很久以前,看到windows自带应用,邮件使用图片作为背景,感觉很好看.你看连微软自家的应用都不用亚克力了😅

然后我就给我的一个app <课程表uwp>添加了一个功能,使用图片作为背景,

我下载了几个图片可供用户选择作为app背景,后来有用户评论说:"你的那几个图片都不好看,想自己设置图片"

然后我增加了一个选择图片作为壁纸的功能.

当初实现的方式有点问题,每次自己设置都会闪退😄....然后1年过去了

---

回到现在:我前几天更新修复了这个功能(ಥ _ ಥ)

========

内容:

之前闪退的原因,因为我使用安装包内的资源文件图片作为背景,如果自定义,我的设想是通过用户选择自己替换掉这些资源图片.然而....安装包内的资源文件并没用写入权限.所以闪退.

参考:UWP读取写入文件权限之_获取任意文件夹/文件权限

所以如果允许用户自定义背景图片,大概就是做法就是下边这样:


		private async void UserDefine_Click(object sender, RoutedEventArgs e)
		{
			// 选择一个图片作为壁纸
			//AppSettings setting = new AppSettings();
			// 让用户选取一个图片文件
			FileOpenPicker fPicker = new FileOpenPicker();
			fPicker.FileTypeFilter.Add(".jpg");
			fPicker.FileTypeFilter.Add(".jpeg");
			fPicker.FileTypeFilter.Add(".png");
			fPicker.FileTypeFilter.Add(".bmp");
			var file = await fPicker.PickSingleFileAsync();
			if (file != null)
			{		
				//
				string mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList.Add(file);
				AppSettings.WriteSetting<string>("skin", mruToken);
				// Add to FA without metadata
				//var faToken1 = StorageApplicationPermissions.FutureAccessList.Add(selectedFile);
				//setting.BackgroundImgToken = mruToken;
				//AppSettings.WriteSetting<string>("skin", index.ToString());
				var SkinImageBrush = new ImageBrush();
				//BitmapImage bimg = new BitmapImage();
				Debug.WriteLine($"图片文件路径{file.Path}");
				//bimg.UriSource = new Uri(file.Path);
				//SkinImageBrush.ImageSource = bimg;
				using (IRandomAccessStream ir = await file.OpenAsync(FileAccessMode.Read))
				{
					BitmapImage bi = new BitmapImage();
					await bi.SetSourceAsync(ir);
					SkinImageBrush.ImageSource = bi;
				}
				//替换壁纸
				ChangeSkinAction(SkinImageBrush);
			}
		}



songshizhao
最初发表2019/10/12 22:04:35 最近更新2019/10/12 22:19:18 47
为此篇作品打分
10
   评论