mirror of
https://github.com/Raphire/Win11Debloat.git
synced 2026-07-02 22:58:34 +00:00
138 lines
5.4 KiB
PowerShell
138 lines
5.4 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Applies light or dark theme colors to a WPF window's resource dictionary.
|
|
|
|
.DESCRIPTION
|
|
Iterates over a predefined set of theme color categories and
|
|
populates the window's Resources with SolidColorBrush entries keyed by
|
|
category and resource name (e.g. "AppAccentColor"). Additionally loads and
|
|
merges shared XAML styles from the script's SharedStylesSchema path if
|
|
available.
|
|
|
|
.PARAMETER window
|
|
The WPF Window whose resource dictionary will be populated.
|
|
|
|
.PARAMETER usesDarkMode
|
|
When $true, dark theme colors are applied; when $false, light theme colors.
|
|
|
|
.EXAMPLE
|
|
SetWindowThemeResources -window $MainWindow -usesDarkMode $true
|
|
|
|
.EXAMPLE
|
|
SetWindowThemeResources -window $Dialog -usesDarkMode $false
|
|
#>
|
|
# Sets resource colors for a WPF window based on dark mode preference
|
|
function SetWindowThemeResources {
|
|
param (
|
|
$window,
|
|
[bool]$usesDarkMode
|
|
)
|
|
|
|
$ThemeColor = @{
|
|
App = @{
|
|
AccentColor = @{ Light = '#ffae00'; Dark = '#ffd700' }
|
|
BorderColor = @{ Light = '#ededed'; Dark = '#404040' }
|
|
BgColor = @{ Light = '#f3f3f3'; Dark = '#202020' }
|
|
FgColor = @{ Light = '#000000'; Dark = '#ffffff' }
|
|
IdColor = @{ Light = '#666666'; Dark = '#afafaf' }
|
|
}
|
|
|
|
Card = @{
|
|
BgColor = @{ Light = '#fbfbfb'; Dark = '#2b2b2b' }
|
|
}
|
|
|
|
Button = @{
|
|
BorderColor = @{ Light = '#d3d3d3'; Dark = '#404040' }
|
|
BgColor = @{ Light = '#0067c0'; Dark = '#0067c0' }
|
|
DisabledColor = @{ Light = '#bfbfbf'; Dark = '#434343' }
|
|
HoverColor = @{ Light = '#1975c5'; Dark = '#1975c5' }
|
|
PressedColor = @{ Light = '#3183ca'; Dark = '#3183ca' }
|
|
TextDisabledColor = @{ Light = '#ffffff'; Dark = '#989898' }
|
|
}
|
|
|
|
SecondaryButton = @{
|
|
BgColor = @{ Light = '#fbfbfb'; Dark = '#393939' }
|
|
DisabledColor = @{ Light = '#f7f7f7'; Dark = '#3b3b3b' }
|
|
HoverColor = @{ Light = '#f6f6f6'; Dark = '#2a2a2a' }
|
|
PressedColor = @{ Light = '#f0f0f0'; Dark = '#1e1e1e' }
|
|
TextDisabledColor = @{ Light = '#b7b7b7'; Dark = '#787878' }
|
|
}
|
|
|
|
CheckBox = @{
|
|
BgColor = @{ Light = '#f5f5f5'; Dark = '#272727' }
|
|
BorderColor = @{ Light = '#898989'; Dark = '#808080' }
|
|
HoverColor = @{ Light = '#ececec'; Dark = '#343434' }
|
|
}
|
|
|
|
ComboBox = @{
|
|
BgColor = @{ Light = '#ffffff'; Dark = '#373737' }
|
|
HoverColor = @{ Light = '#f8f8f8'; Dark = '#434343' }
|
|
ItemBgColor = @{ Light = '#f9f9f9'; Dark = '#2c2c2c' }
|
|
ItemHoverColor = @{ Light = '#f0f0f0'; Dark = '#383838' }
|
|
ItemSelectedColor = @{ Light = '#f3f3f3'; Dark = '#343434' }
|
|
}
|
|
|
|
TextBox = @{
|
|
BorderColor = @{ Light = '#bdbdbd'; Dark = '#989a9d' }
|
|
BgColor = @{ Light = '#fbfbfb'; Dark = '#2d2d2d' }
|
|
FocusColor = @{ Light = '#ffffff'; Dark = '#1f1f1f' }
|
|
HoverColor = @{ Light = '#f6f6f6'; Dark = '#323232' }
|
|
SideBorderColor = @{ Light = '#ececec'; Dark = '#343434' }
|
|
}
|
|
|
|
ScrollBar = @{
|
|
ThumbColor = @{ Light = '#b9b9b9'; Dark = '#3d3d3d' }
|
|
ThumbHoverColor = @{ Light = '#8b8b8b'; Dark = '#4b4b4b' }
|
|
}
|
|
|
|
TitleBar = @{
|
|
ButtonHoverColor = @{ Light = '#dcdcdc'; Dark = '#353535' }
|
|
ButtonPressedColor = @{ Light = '#cccccc'; Dark = '#333333' }
|
|
CloseHoverColor = @{ Light = '#e81123'; Dark = '#e81123' }
|
|
ClosePressedColor = @{ Light = '#f1707a'; Dark = '#f1707a' }
|
|
UnfocusedFgColor = @{ Light = '#868686'; Dark = '#969696' }
|
|
}
|
|
|
|
Search = @{
|
|
HighlightActiveColor = @{ Light = '#ffd966'; Dark = '#8a7000' }
|
|
HighlightColor = @{ Light = '#fff4ce'; Dark = '#4a4a2a' }
|
|
}
|
|
|
|
Table = @{
|
|
HeaderColor = @{ Light = '#ffffff'; Dark = '#303030' }
|
|
}
|
|
|
|
Icon = @{
|
|
ErrorColor = @{ Light = '#e81123'; Dark = '#e81123' }
|
|
InformationColor = @{ Light = '#0078d4'; Dark = '#0078d4' }
|
|
QuestionColor = @{ Light = '#0078d4'; Dark = '#0078d4' }
|
|
SuccessColor = @{ Light = '#107c10'; Dark = '#107c10' }
|
|
WarningColor = @{ Light = '#ffb900'; Dark = '#ffb900' }
|
|
}
|
|
}
|
|
|
|
$Theme = if ($usesDarkMode) { 'Dark' } else { 'Light' }
|
|
|
|
foreach ($Group in $ThemeColor.GetEnumerator()) {
|
|
foreach ($Resource in $Group.Value.GetEnumerator()) {
|
|
$ResourceName = $Group.Key + $Resource.Key
|
|
$window.Resources[$ResourceName] = [System.Windows.Media.SolidColorBrush]::new(
|
|
[System.Windows.Media.ColorConverter]::ConvertFromString($Resource.Value[$Theme])
|
|
)
|
|
}
|
|
}
|
|
|
|
# Load and merge shared styles
|
|
if ($script:SharedStylesSchema -and (Test-Path $script:SharedStylesSchema)) {
|
|
$sharedXaml = Get-Content -Path $script:SharedStylesSchema -Raw
|
|
$sharedReader = [System.Xml.XmlReader]::Create([System.IO.StringReader]::new($sharedXaml))
|
|
try {
|
|
$sharedDict = [System.Windows.Markup.XamlReader]::Load($sharedReader)
|
|
$window.Resources.MergedDictionaries.Add($sharedDict)
|
|
}
|
|
finally {
|
|
$sharedReader.Close()
|
|
}
|
|
}
|
|
}
|