引子:
很久以前,看到windows自带应用,邮件使用图片作为背景,感觉很好看.你看连微软自家的应用都不用亚克力了😅
然后我就给我的一个app <课程表uwp>添加了一个功能,使用图片作为背景,
我下载了几个图片可供用户选择作为app背景,后来有用户评论说:"你的那几个图片都不好看,想自己设置图片"
然后我增加了一个选择图片作为壁纸的功能.
当初实现的方式有点问题,每次自己设置都会闪退😄....然后1年过去了
---
回到现在:我前几天更新修复了这个功能(ಥ _ ಥ)
========
内容:
之前闪退的原因,因为我使用安装包内的资源文件图片作为背景,如果自定义,我的设想是通过用户选择自己替换掉这些资源图片.然而....安装包内的资源文件并没用写入权限.所以闪退.
所以如果允许用户自定义背景图片,大概就是做法就是下边这样:
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);
}
}