Смена фона рабочего стола и экрана блокировки из C#/XAML приложения UWP +8



Довольно интересной возможностью приложений UWP является то, что можно без особых проблем изменить фон и заставку экрана блокировки. Что странно, так это то, что даже не выдается никакого предупреждения и не требуется установка разрешений в манифесте (хотя что-нибудь вроде пункта User Account Information из Capabilities манифеста вполне могло бы и потребоваться).

Под катом описание простенького, но забавного трюка.

Как только что упоминал, смена фона не требует никаких разрешений. Достаточно добавить в приложение файл изображения (я добавил файл кота ниндзя — ninjacat.png) и использовать такой вот сниппет:

       if (UserProfilePersonalizationSettings.IsSupported())
            {
     StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///ninjacat.png"));
     // файл из приложения не может быть установлен в качестве заставки, поэтому копируем его в локальную папку
     StorageFile localFile = await file.CopyAsync(ApplicationData.Current.LocalFolder,"ninjacat.png",
                                                                               NameCollisionOption.ReplaceExisting);

     UserProfilePersonalizationSettings settings = UserProfilePersonalizationSettings.Current;
     bool isSuccess = await settings.TrySetWallpaperImageAsync(localFile);
            }

Для использования сниппета было добавлено два пространства имен:

using Windows.System.UserProfile;
using Windows.Storage;

Для установки фона мы используем класс UserProfilePersonalizationSettings, предварительно проверяя, поддерживается ли смена фона профиля. Обратите внимание, что для того, чтобы использовать изображение, необходимо было скопировать его из директории приложения в другую доступную папку (я использовал локальную папку приложения).

Для установки изображения на экран блокировки необходимо в сниппете заменить последнюю строку на:

   bool isSuccess = await settings.TrySetLockScreenImageAsync(localFile);

Кстати, очевидно, что значением isSuccess в случае успеха будет true, а в случае неудачи false.

Вполне можно и подгрузить картинку из сети. В таком случае наш сниппет изменится на такой:

            if (UserProfilePersonalizationSettings.IsSupported())
            {
         StorageFile localFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("cat.png",
                                                                       CreationCollisionOption.ReplaceExisting);
         BackgroundDownloader downloader = new BackgroundDownloader();
         DownloadOperation dl = downloader.CreateDownload(new Uri("http://az648995.vo.msecnd.net/win/2015/07/Windows_Insider_Ninjacat_Unicorn-1024x768-Desktop.png"), localFile);
         await dl.StartAsync();

         UserProfilePersonalizationSettings settings = UserProfilePersonalizationSettings.Current;
         var isSuccess = await settings.TrySetWallpaperImageAsync(localFile);
            }

Но в таком случае не забудьте в манифесте приложения, в возможностях поставить галочку напротив «Интернет (клиент)» и добавить пространство имен

using Windows.Networking.BackgroundTransfer;




К сожалению, не доступен сервер mySQL