Add-Type -AssemblyName "PresentationCore", "PresentationFramework", "WindowsBase" #region Variable $clickedToggle = 0 # If > 0 show "Save" and "Apply" button, else hide "Save" and "Apply" button #endregion Variable [xml]$xamlMarkup = @' '@ $xamlGui = [System.Windows.Markup.XamlReader]::Load((New-Object System.Xml.XmlNodeReader $xamlMarkup)) $xamlMarkup.SelectNodes('//*[@Name]') | ForEach-Object { New-Variable -Name $_.Name -Value $xamlGui.FindName($_.Name) -Force } #region Script Functions function Hide-Console { <# .SYNOPSIS Hide Powershell console before show WPF GUI. #> [CmdletBinding()] param () Add-Type -Name Window -Namespace Console -MemberDefinition ' [DllImport("Kernel32.dll")] public static extern IntPtr GetConsoleWindow(); [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow); ' [Console.Window]::ShowWindow([Console.Window]::GetConsoleWindow(), 0) } function Use-HamburgerMenu { <# .SYNOPSIS Show or hide hamburger menu. #> [CmdletBinding()] param () $minWidth = 50 $maxWidth = 250 $duration = New-Object System.Windows.Duration([timespan]::FromSeconds(1)) $widthProperty = New-Object System.Windows.PropertyPath([System.Windows.Controls.Canvas]::WidthProperty) if ($HamburgerMenu.ActualWidth -eq $minWidth) { $animation = New-Object System.Windows.Media.Animation.DoubleAnimation($minWidth, $maxWidth, $duration) } else { $animation = New-Object System.Windows.Media.Animation.DoubleAnimation($maxWidth, $minWidth, $duration) } $animation.SpeedRatio ="3" $storyboard = New-Object System.Windows.Media.Animation.Storyboard [System.Windows.Media.Animation.Storyboard]::SetTargetProperty($animation, $widthProperty) $storyboard.Children.Add($animation) $storyboard.Begin($HamburgerMenu) } function Set-HamburgerHover { <# .SYNOPSIS Mouse hover effect for hamburger button. #> [CmdletBinding()] param ( [Parameter(Mandatory=$false)] [switch]$Active ) if ($Active) { $ButtonHamburger.Background = "#2196F3" } else { $ButtonHamburger.Background = "#3F51B5" } } function Click-HamburgerButton { <# .SYNOPSIS Click event to Hamburger Category Button. #> [CmdletBinding()] param ( [Parameter(Mandatory=$true)] $ShowPanel, [Parameter(Mandatory=$true)] [string]$SetHeader ) $PanelToggle_ContextMenu, $PanelToggle_Defender, $PanelToggle_Edge, $PanelToggle_Game, $PanelToggle_OneDrive, $PanelToggle_Privacy, $PanelToggle_StartMenu, $PanelToggle_System, $PanelToggle_Tasks, $PanelToggle_Ui, $PanelToggle_Uwp | ForEach-Object { if (($_.Name -eq $ShowPanel.Name) -and ($_.Visibility -eq "Collapsed")) { $_.Visibility = "Visible" } elseif (($_.Name -ne $ShowPanel.Name) -and ($_.Visibility -eq "Visible")) { $_.Visibility = "Collapsed" } } $TextBlock_Category.Text = $SetHeader } function Click-ToggleButton { <# .SYNOPSIS Click event to Toggle Buttons. #> [CmdletBinding()] param ( [Parameter(Mandatory=$false)] [switch]$Check ) if ($Check) { $Global:clickedToggle++ } elseif (!$Check) { $Global:clickedToggle-- } if ($clickedToggle -gt 0) { $ButtonApply.Visibility = "Visible" $ButtonSave.Visibility = "Visible" } else { $ButtonApply.Visibility = "Hidden" $ButtonSave.Visibility = "Hidden" } } #endregion #region Controls Events $ButtonHamburger.Add_MouseLeftButtonDown({ Use-HamburgerMenu }) $ButtonHamburger.Add_MouseEnter({ Set-HamburgerHover -Active }) $ButtonHamburger.Add_MouseLeave({ Set-HamburgerHover }) #endregion #region Add Click Event to Hamburger Category Buttons $Button_ContextMenu.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_ContextMenu -SetHeader "Context Menu" }) $Button_Defender.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_Defender -SetHeader "Microsoft Defender" }) $Button_Edge.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_Edge -SetHeader "Microsoft Edge" }) $Button_Game.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_Game -SetHeader "Windows Game Recording" }) $Button_OneDrive.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_OneDrive -SetHeader "OneDrive" }) $Button_Privacy.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_Privacy -SetHeader "Privacy & Telemetry" }) $Button_StartMenu.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_StartMenu -SetHeader "Start Menu" }) $Button_System.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_System -SetHeader "System" }) $Button_Tasks.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_Tasks -SetHeader "Scheduled Tasks" }) $Button_Ui.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_Ui -SetHeader "UI & Personalization" }) $Button_Uwp.Add_MouseLeftButtonDown({ Click-HamburgerButton -ShowPanel $PanelToggle_Uwp -SetHeader "Uwp Apps" }) #endregion #region Add Click Event to Toggle Buttons Get-Variable -Name "Toggle_*" | ForEach-Object { $toggle = $Window.FindName($_.Name) $toggle.Add_Checked({ Click-ToggleButton -Check }) $toggle.Add_Unchecked({ Click-ToggleButton }) } #endregion Hide-Console $Window.ShowDialog() | Out-Null