[Light Switch] Switch desktop wallpapers with the Light/Dark mode (#42624)

I'm not sure how to set the AccentColor and ColorizationColor that is
consistent with the Settings App, and the same goes for switching
themes. If anyone has a solution, please let me know.


<img width="2010" height="1274" alt="2025-10-26 235808"
src="https://github.com/user-attachments/assets/b3eda45a-09f3-43bc-b87c-1b05bc308c24"
/>


- [x] Closes: #42436
- [ ] **Communication:** I've discussed this with core contributors
already. If the work hasn't been agreed, this work might be rejected
- [ ] **Tests:** Added/updated and all pass
- [x] **Localization:** All end-user-facing strings can be localized
- [ ] **Dev docs:** Added/updated
- [ ] **New binaries:** Added on the required places
- [ ] [JSON for
signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json)
for new binaries
- [ ] [WXS for
installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs)
for new binaries and localization folder
- [ ] [YML for CI
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml)
for new test projects
- [ ] [YML for signed
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
- [ ] **Documentation updated:** If checked, please file a pull request
on [our docs
repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys)
and link it here: #xxx

---------

Co-authored-by: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
This commit is contained in:
Yexuan Xiao
2026-01-07 01:55:55 +08:00
committed by GitHub
parent d9709b2b91
commit 19c9b4e1fd
25 changed files with 1118 additions and 310 deletions

View File

@@ -16,9 +16,13 @@ using Microsoft.PowerToys.Settings.UI.ViewModels;
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Media.Imaging;
using Microsoft.Windows.Storage.Pickers;
using PowerToys.GPOWrapper;
using Settings.UI.Library;
using Windows.Devices.Geolocation;
using Windows.Storage;
using Windows.Storage.Streams;
namespace Microsoft.PowerToys.Settings.UI.Views
{
@@ -185,7 +189,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
// need to save the values
this.ViewModel.Latitude = latitude.ToString(CultureInfo.InvariantCulture);
this.ViewModel.Longitude = longitude.ToString(CultureInfo.InvariantCulture);
this.ViewModel.SyncButtonInformation = $"{this.ViewModel.Latitude}<7D>, {this.ViewModel.Longitude}<7D>";
this.ViewModel.SyncButtonInformation = $"{this.ViewModel.Latitude}<7D>, {this.ViewModel.Longitude}<7D>";
var result = SunCalc.CalculateSunriseSunset(latitude, longitude, DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
@@ -391,5 +395,50 @@ namespace Microsoft.PowerToys.Settings.UI.Views
this.LocationWarningBar.Visibility = Visibility.Visible;
}
}
private async void PickWallpaper_Click(object sender, RoutedEventArgs e)
{
var tag = (sender as Button).Tag as string;
var fileOpenPicker = new FileOpenPicker((sender as Button).XamlRoot.ContentIslandEnvironment.AppWindowId);
string[] extensions = { ".jpg", ".jpeg", ".bmp", ".dib", ".png", ".jfif", ".jpe", ".gif", ".tif", ".tiff", ".wdp", ".heic", ".heif", ".heics", ".heifs", ".hif", ".avci", ".avcs", ".avif", ".avifs", ".jxr", ".jxl", ".webp" };
foreach (var ext in extensions)
{
fileOpenPicker.FileTypeFilter.Add(ext);
}
fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
var selectedFile = await fileOpenPicker.PickSingleFileAsync();
if (selectedFile == null)
{
return;
}
if (!string.IsNullOrEmpty(ViewModel.WallpaperPathLight) && tag == "Light")
{
LightSwitchViewModel.DeleteFile(ViewModel.WallpaperPathLight);
ViewModel.WallpaperPathLight = string.Empty;
}
else if (!string.IsNullOrEmpty(ViewModel.WallpaperPathDark) && tag == "Dark")
{
LightSwitchViewModel.DeleteFile(ViewModel.WallpaperPathDark);
ViewModel.WallpaperPathDark = string.Empty;
}
var srcFile = await StorageFile.GetFileFromPathAsync(selectedFile.Path);
var settingsFolder = await StorageFolder.GetFolderFromPathAsync(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\Microsoft\\PowerToys\\LightSwitch");
var dstFile = await settingsFolder.CreateFileAsync($"{tag}{DateTime.Now.ToFileTime()}{srcFile.FileType}", CreationCollisionOption.ReplaceExisting);
await FileIO.WriteBufferAsync(dstFile, await FileIO.ReadBufferAsync(srcFile));
if (tag == "Light")
{
ViewModel.WallpaperPathLight = dstFile.Path;
}
else if (tag == "Dark")
{
ViewModel.WallpaperPathDark = dstFile.Path;
}
}
}
}