Add-Type -AssemblyName "PresentationCore", "PresentationFramework", "WindowsBase" [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) } #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) { $Button_Hamburger.Background = "#2196F3" } else { $Button_Hamburger.Background = "#3F51B5" } } #endregion #region Controls Events $Button_Hamburger.Add_MouseLeftButtonDown({ Use-HamburgerMenu }) $Button_Hamburger.Add_MouseEnter({ Set-HamburgerHover -Active }) $Button_Hamburger.Add_MouseLeave({ Set-HamburgerHover }) #endregion Hide-Console $Window.ShowDialog() | Out-Null