Resources/XAML/Protect.xaml
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Style="{StaticResource Page_Style}" Background="Transparent" FontFamily="Trebuchet MS" FontSize="16" ToolTipService.InitialShowDelay="500" ToolTipService.ShowDuration="2147483647" ToolTipService.BetweenShowDelay="0" ToolTipService.ShowOnDisabled="True"> <!-- The UserControl's 4 tooltip related elements are necessary for the style to appear properly and they only appear to this User Control/View --> <!-- Grid for Online Mode Tab - Removing the white border with negative margins --> <Grid x:Name="ParentGrid" Margin="-2.3,-2.3,-2.3,-2.3"> <!-- Row definitions for the grid --> <Grid.RowDefinitions> <!-- Main Toggle Button Row --> <RowDefinition Height="Auto"/> <!-- Main Content Control for all other elements Row --> <RowDefinition Height="*"/> <!-- Execute button Row --> <RowDefinition Height="150"/> </Grid.RowDefinitions> <!-- Column definitions for the grid --> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <StackPanel Margin="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="0" Grid.ColumnSpan="2"> <!-- ComboBox --> <ComboBox x:Name="ProtectionPresetComboBox" Width="200" Margin="0,0,20,0" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip="Optionally choose a preset that automatically configures the categories and sub-categories for you" Style="{StaticResource ModernComboBoxStyle}" ItemContainerStyle="{StaticResource ModernComboBoxItemStyle}" SelectedIndex="1"> <ComboBoxItem Content="Preset: Basic" /> <ComboBoxItem Content="Preset: Recommended" /> <ComboBoxItem Content="Preset: Complete" /> </ComboBox> <!-- ToggleButton --> <ToggleButton HorizontalAlignment="Center" Margin="0" x:Name="MainTabControlToggle" ToolTip="Choose between Online or Offline modes" Foreground="White" Height="40" Width="170" FontSize="18"> <ToggleButton.Template> <ControlTemplate TargetType="ToggleButton"> <Border x:Name="Button1" Background="{StaticResource PinkGradient}" CornerRadius="20" Padding="1"> <Border x:Name="Button2" Background="{StaticResource GradientBLK}" Width="80" CornerRadius="20" HorizontalAlignment="Left"> <TextBlock x:Name="TextBlock1" Text="Online" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center"/> </Border> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="Button2" Property="HorizontalAlignment" Value="Right"/> <!-- The color can be changed to be different when the button is toggled vs when it's not --> <Setter TargetName="Button1" Property="Background" Value="{StaticResource PinkGradient}"/> <Setter TargetName="TextBlock1" Property="Text" Value="Offline"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </ToggleButton.Template> </ToggleButton> </StackPanel> <!-- ContentControl to display content based on the ToggleButton's state --> <ContentControl Grid.Row="1" Grid.ColumnSpan="2" x:Name="MainContentControl"> <ContentControl.Style> <Style TargetType="ContentControl" x:Name="MainContentControlStyle"> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=MainTabControlToggle, Path=IsChecked}" Value="False"> <Setter Property="Content"> <Setter.Value> <!-- Online Tab/Grid --> <Grid x:Name="Grid1" Margin="-2.3,-2.3,-2.3,-2.3"> <!-- Row and Column definitions for the grid --> <Grid.RowDefinitions> <!-- This is for row 0 --> <RowDefinition Height="25"/> <!-- This is for row 1 --> <RowDefinition Height="4*" MinHeight="100"/> <!-- This is for row 2 --> <RowDefinition Height="70"/> <!-- This is for row 3 --> <RowDefinition Height="30"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <!-- Categories and Sub-Categories text blocks --> <TextBlock x:Name="TextBlockCategories" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="1" HorizontalAlignment="Center" VerticalAlignment="bottom" Text="Categories" Foreground="#FFFA00FF" FontSize="18"> <TextBlock.Effect> <DropShadowEffect ShadowDepth="6" Direction="320" Color="#FFF485F0" Opacity="100" BlurRadius="10" RenderingBias="Quality"/> </TextBlock.Effect> </TextBlock> <TextBlock x:Name="TextBlockSubCategories" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="1" HorizontalAlignment="Center" VerticalAlignment="bottom" Text="Sub-Categories" Foreground="#FFFA00FF" FontSize="18"> <TextBlock.Effect> <DropShadowEffect ShadowDepth="6" Direction="320" Color="#FFF485F0" Opacity="100" BlurRadius="10" RenderingBias="Quality"/> </TextBlock.Effect> </TextBlock> <Grid Name="InnerGrid1" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" Margin="10"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <CheckBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="1" Content="Select All" VerticalContentAlignment="Center" Margin="7,0,0,2" Padding="10,10,40,10" x:Name="SelectAllCategories" Template="{StaticResource CustomCheckBoxTemplate}"/> <!-- ListViews for Categories --> <ListView x:Name="Categories" BorderThickness="0" ToolTip="Select the hardening categories to run" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" VirtualizingPanel.ScrollUnit="Pixel"> <!-- Background color for the ListView --> <ListView.Background> <SolidColorBrush Color="transparent"/> </ListView.Background> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Microsoft Security Baselines | This is the foundation of all policies and is highly recommended to be selected."> <CheckBox x:Name="MicrosoftSecurityBaselines" Content="Microsoft Security Baselines" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}" /> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="MSFT365 Apps Security Baselines | You can use it even if you don't have Office apps installed."> <CheckBox x:Name="Microsoft365AppsSecurityBaselines" Content="MSFT365 Apps Security Baselines" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Microsoft Defender | Highly Recommended to apply"> <CheckBox x:Name="MicrosoftDefender" Content="Microsoft Defender" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Attack Surface Reduction Rules | Highly Recommended to apply"> <CheckBox x:Name="AttackSurfaceReductionRules" Content="Attack Surface Reduction Rules" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="BitLocker Settings | Highly Recommended to apply"> <CheckBox x:Name="BitLockerSettings" Content="BitLocker Settings" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="TLS Security | Highly Recommended to apply"> <CheckBox x:Name="TLSSecurity" Content="TLS Security" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Lock Screen"> <CheckBox x:Name="LockScreen" Content="Lock Screen" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="User Account Control | Highly Recommended to apply"> <CheckBox x:Name="UserAccountControl" Content="User Account Control" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Windows Firewall Category"> <CheckBox x:Name="WindowsFirewall" Content="Windows Firewall" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Optional Windows Features Category | Highly Recommended to apply"> <CheckBox x:Name="OptionalWindowsFeatures" Content="Optional Windows Features" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Windows Networking Category"> <CheckBox x:Name="WindowsNetworking" Content="Windows Networking" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Miscellaneous Configurations | Highly Recommended to apply"> <CheckBox x:Name="MiscellaneousConfigurations" Content="Miscellaneous Configurations" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Windows Update Configurations | Highly Recommended to apply"> <CheckBox x:Name="WindowsUpdateConfigurations" Content="Windows Update Configurations" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Edge Browser Configurations"> <CheckBox x:Name="EdgeBrowserConfigurations" Content="Edge Browser Configurations" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Certificate Checking Commands"> <CheckBox x:Name="CertificateCheckingCommands" Content="Certificate Checking Commands" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Country IP Blocking"> <CheckBox x:Name="CountryIPBlocking" Content="Country IP Blocking" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Downloads Defense Measures"> <CheckBox x:Name="DownloadsDefenseMeasures" Content="Downloads Defense Measures" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Non-Admin Commands"> <CheckBox x:Name="NonAdminCommands" Content="Non-Admin Commands" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> </ListView> </Grid> <Grid x:Name="InnerGrid2" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="1" Margin="10"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <CheckBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="1" Content="Select All" VerticalContentAlignment="Center" Margin="6,0,0,2" x:Name="SelectAllSubCategories" Template="{StaticResource CustomCheckBoxTemplate}"/> <!-- ListViews for Sub-Categories --> <ListView x:Name="SubCategories" BorderThickness="0" ToolTip="Select sub-categories" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" VirtualizingPanel.ScrollUnit="Pixel"> <ListView.Background> <SolidColorBrush Color="transparent"/> </ListView.Background> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="NOT Recommended to use!"> <CheckBox x:Name="SecBaselines_NoOverrides" Content="Security Baselines No Overrides" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Enables Smart App Control"> <CheckBox x:Name="MSFTDefender_SAC" Content="Smart App Control" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="NOT Recommended to use!"> <CheckBox x:Name="MSFTDefender_NoDiagData" Content="Defender: No Diagnostics Data" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="NOT Recommended to use!"> <CheckBox x:Name="MSFTDefender_NoScheduledTask" Content="Defender: No Scheduled Task" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Faster updates for Defender"> <CheckBox x:Name="MSFTDefender_BetaChannels" Content="Defender: Use Beta Update Channels" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="More robust lock screen"> <CheckBox x:Name="LockScreen_CtrlAltDel" Content="Require CTRL + Alt + Del" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="WILL PREVENT PIN RESET IF YOU FORGET YOUR PIN ON LOCK SCREEN!"> <CheckBox x:Name="LockScreen_NoLastSignedIn" Content="No Last Signed-In" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="WILL PREVENT PIN RESET IF YOU FORGET YOUR PIN ON LOCK SCREEN!"> <CheckBox x:Name="UAC_NoFastSwitching" Content="No Fast User Switching" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Only Signed programs will be able to run as Admin!"> <CheckBox x:Name="UAC_OnlyElevateSigned" Content="Only Elevated Signed" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Blocks OFAC sanctioned countries' IPs in Firewall."> <CheckBox x:Name="CountryIPBlocking_OFAC" Content="Block OFAC Sanctions Countries" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> <ListViewItem ToolTipService.InitialShowDelay="500" ToolTip="Recommend to use"> <CheckBox x:Name="DangerousScriptHostsBlocking" Content="Block Dangerous Script Hosts" VerticalContentAlignment="Center" Padding="10,10,40,10" Template="{StaticResource CustomCheckBoxTemplate}"/> </ListViewItem> </ListView> </Grid> <StackPanel Orientation="Horizontal" Grid.Row="2" Grid.ColumnSpan="2" HorizontalAlignment="Center"> <!-- Enable Logging CheckBox --> <ToggleButton x:Name="Log" ToolTip="Enable logging" Foreground="White" Height="40" Width="170" FontSize="14" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"> <ToggleButton.Template> <ControlTemplate TargetType="ToggleButton"> <Border x:Name="Button11" Background="LightGray" CornerRadius="10" Padding="3"> <Border x:Name="Button22" Background="Black" Width="100" CornerRadius="10" HorizontalAlignment="Left"> <TextBlock x:Name="TextBlock11" Text="Logging Off" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center"/> </Border> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="Button22" Property="HorizontalAlignment" Value="Right"/> <Setter TargetName="Button11" Property="Background" Value="#FFF485F0"/> <Setter TargetName="TextBlock11" Property="Text" Value="Logging On"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </ToggleButton.Template> </ToggleButton> <!-- Enable EventLogging CheckBox --> <ToggleButton x:Name="EventLogging" ToolTip="Enable Event logging" Foreground="White" Height="40" Width="200" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0,10,0"> <ToggleButton.Template> <ControlTemplate TargetType="ToggleButton"> <Border x:Name="Button11" Background="LightGray" CornerRadius="10" Padding="3"> <Border x:Name="Button22" Background="Black" Width="125" CornerRadius="10" HorizontalAlignment="Left"> <TextBlock x:Name="TextBlock11" Text="Event Logging Off" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center"/> </Border> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="Button22" Property="HorizontalAlignment" Value="Right"/> <Setter TargetName="Button11" Property="Background" Value="#99f2c8"/> <Setter TargetName="TextBlock11" Property="Text" Value="Event Logging On"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </ToggleButton.Template> </ToggleButton> <!-- Log Path TextBox --> <Button x:Name="LogPath" Style="{StaticResource CustomButtonStyle2}" ToolTip="The path to save the log file to" Margin="0,0,10,0"> <StackPanel Orientation="Horizontal"> <Image x:Name="LogButtonIcon" Width="40" Height="30"/> <TextBlock Text="Log Path" VerticalAlignment="Center" Margin="0,0,8,0"/> </StackPanel> </Button> </StackPanel> <!-- File Path TextBox --> <TextBox x:Name="txtFilePath" Grid.Row="3" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="30,0,30,0" BorderThickness="0" ToolTip="The selected log file path" MaxWidth="700"> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Border CornerRadius="10" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> <ScrollViewer x:Name="PART_ContentHost" Margin="0"/> </Border> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="Effect"> <Setter.Value> <DropShadowEffect ShadowDepth="0" Direction="0" Color="#FFF485F0" Opacity="1" BlurRadius="10" RenderingBias="Quality"/> </Setter.Value> </Setter> <Style.Triggers> <!-- Trigger to apply blur when the TextBox is disabled --> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Effect"> <Setter.Value> <BlurEffect Radius="5"/> </Setter.Value> </Setter> <!-- Reducing the opacity to further indicate that the TextBox is disabled --> <Setter Property="Opacity" Value="0.7"/> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox> </Grid> </Setter.Value> </Setter> </DataTrigger> <DataTrigger Binding="{Binding ElementName=MainTabControlToggle, Path=IsChecked}" Value="True"> <Setter Property="Content"> <Setter.Value> <!-- Offline Tab/Grid --> <Grid x:Name="Grid2" Margin="-2.3,-2.3,-2.3,-2.3"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <!-- Button column --> <ColumnDefinition Width="*"/> <!-- Text area column --> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <!-- This is for row 0 --> <RowDefinition Height="60"/> <!-- This is for row 1 --> <RowDefinition Height="60"/> <!-- This is for row 2 --> <RowDefinition Height="60"/> <!-- This is for row 3 --> <RowDefinition Height="60"/> </Grid.RowDefinitions> <!-- Row 0 --> <!-- Enable Offline Mode CheckBox --> <Viewbox Grid.Row="0" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,20,0,0"> <ToggleButton x:Name="EnableOfflineMode" ToolTip="Enables Offline Mode and will use the selected files instead of downloading them from the Microsoft servers" Foreground="White" Height="40" Width="170" FontSize="16"> <ToggleButton.Template> <ControlTemplate TargetType="ToggleButton"> <Border x:Name="Button111" Background="LightGray" CornerRadius="10" Padding="3"> <Border x:Name="Button222" Background="Black" Width="100" CornerRadius="10" HorizontalAlignment="Left"> <TextBlock x:Name="TextBlock111" Text="Disabled" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center"/> </Border> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="Button222" Property="HorizontalAlignment" Value="Right"/> <Setter TargetName="Button111" Property="Background" Value="#04C8F9"/> <Setter TargetName="TextBlock111" Property="Text" Value="Enabled"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </ToggleButton.Template> </ToggleButton> </Viewbox> <!-- Row 1 --> <StackPanel Orientation="Horizontal" Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" Margin="30,0,30,0"> <!-- LGPO Button --> <Button x:Name="LGPOZipButton" Style="{StaticResource CustomButtonStyle2}" Margin="0,0,0,0" ToolTip="Browse for the path to LGPO zip file"> <StackPanel Orientation="Horizontal"> <Image x:Name="PathIcon3" Width="40" Height="30"/> <TextBlock Text="LGPO" VerticalAlignment="Center" Margin="0,0,8,0"/> </StackPanel> </Button> <!-- LGPO Path Text box --> <TextBox x:Name="LGPOZipTextBox" Height="40" Margin="20,0,0,0" ToolTip="Selected path for the LGPO zip file" MinWidth="210" MaxWidth="700"> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="Foreground" Value="Black"/> <Setter Property="Effect"> <Setter.Value> <DropShadowEffect ShadowDepth="0" Direction="0" Color="#FFF485F0" Opacity="1" BlurRadius="10" RenderingBias="Quality"/> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Grid> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"/> <ScrollViewer x:Name="PART_ContentHost" Margin="5,0"/> <TextBlock x:Name="PART_Watermark" Text="Selected Path will be displayed here..." Foreground="Gray" IsHitTestVisible="False" Margin="5,0" VerticalAlignment="Center" Visibility="Collapsed"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="Text" Value=""> <Setter TargetName="PART_Watermark" Property="Visibility" Value="Visible"/> </Trigger> <Trigger Property="Text" Value="{x:Null}"> <Setter TargetName="PART_Watermark" Property="Visibility" Value="Visible"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </TextBox.Style> </TextBox> </StackPanel> <!-- Row 2 --> <StackPanel Orientation="Horizontal" Grid.Row="2" Grid.ColumnSpan="2" HorizontalAlignment="Center" Margin="30,0,30,0"> <!-- Microsoft Security Baselines Button --> <Button x:Name="MicrosoftSecurityBaselineZipButton" Style="{StaticResource CustomButtonStyle2}" Margin="0,0,0,0" ToolTip="Browse for the path to Microsoft Security Baseline zip file"> <StackPanel Orientation="Horizontal"> <Image x:Name="PathIcon1" Width="40" Height="30"/> <TextBlock Text="Microsoft Security Baseline" VerticalAlignment="Center" Margin="0,0,8,0"/> </StackPanel> </Button> <!-- Microsoft Security Baselines Text block --> <TextBox x:Name="MicrosoftSecurityBaselineZipTextBox" Height="40" Margin="20,0,0,0" MinWidth="210" MaxWidth="700" ToolTip="Selected path for the Microsoft Security Baseline zip file" VerticalContentAlignment="Center"> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Setter Property="Foreground" Value="Black"/> <Setter Property="Effect"> <Setter.Value> <DropShadowEffect ShadowDepth="0" Direction="0" Color="#FFF485F0" Opacity="1" BlurRadius="10" RenderingBias="Quality"/> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Grid> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"/> <!-- Adjust the ScrollViewer's VerticalAlignment to Center --> <ScrollViewer x:Name="PART_ContentHost" Margin="5,0" VerticalAlignment="Center"/> <TextBlock x:Name="PART_Watermark" Text="Selected Path will be displayed here..." Foreground="Gray" IsHitTestVisible="False" Margin="5,0" VerticalAlignment="Center" Visibility="Collapsed"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="Text" Value=""> <Setter TargetName="PART_Watermark" Property="Visibility" Value="Visible"/> </Trigger> <Trigger Property="Text" Value="{x:Null}"> <Setter TargetName="PART_Watermark" Property="Visibility" Value="Visible"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </TextBox.Style> </TextBox> </StackPanel> <!-- Row 3 --> <StackPanel Orientation="Horizontal" Grid.Row="3" Grid.ColumnSpan="2" HorizontalAlignment="Center" Margin="30,0,30,0"> <!-- M365 apps security baselines button --> <Button x:Name="Microsoft365AppsSecurityBaselineZipButton" Style="{StaticResource CustomButtonStyle2}" Margin="0,0,0,0" ToolTip="Browse for the path to Microsoft 365 Apps Security Baseline zip file"> <StackPanel Orientation="Horizontal"> <Image x:Name="PathIcon2" Width="40" Height="30"/> <TextBlock Text="Microsoft 365 Apps Security Baseline" VerticalAlignment="Center" Margin="0,0,8,0"/> </StackPanel> </Button> <!-- M365 apps security baselines text block --> <TextBox x:Name="Microsoft365AppsSecurityBaselineZipTextBox" Height="40" Margin="20,0,0,0" MinWidth="210" MaxWidth="700" ToolTip="Selected path for the Microsoft 365 Apps Security Baseline zip file" VerticalContentAlignment="Center"> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Setter Property="Foreground" Value="Black"/> <Setter Property="Effect"> <Setter.Value> <DropShadowEffect ShadowDepth="0" Direction="0" Color="#FFF485F0" Opacity="1" BlurRadius="10" RenderingBias="Quality"/> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Grid> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"/> <!-- Adjust the ScrollViewer's VerticalAlignment to Center --> <ScrollViewer x:Name="PART_ContentHost" Margin="5,0" VerticalAlignment="Center"/> <TextBlock x:Name="PART_Watermark" Text="Selected Path will be displayed here..." Foreground="Gray" IsHitTestVisible="False" Margin="5,0" VerticalAlignment="Center" Visibility="Collapsed"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="Text" Value=""> <Setter TargetName="PART_Watermark" Property="Visibility" Value="Visible"/> </Trigger> <Trigger Property="Text" Value="{x:Null}"> <Setter TargetName="PART_Watermark" Property="Visibility" Value="Visible"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </TextBox.Style> </TextBox> </StackPanel> </Grid> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> </ContentControl> <!-- Grid containing the Execute Button --> <Grid x:Name="ExecuteButtonGrid" Grid.Row="2" Grid.ColumnSpan="2" Height="150"> <!-- First Ellipse (Forward1) - Represents the outermost expanding ellipse when the button is clicked --> <!-- Initial height and Width of the Ellipse --> <Ellipse x:Name="EclipseForward1" Height="50" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center"> <!-- Ellipse Fill with a gradient from #ED4264 to #cbad6d --> <Ellipse.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#ED4264" Offset="0.0" /> <GradientStop Color="#cbad6d" Offset="1.0" /> </LinearGradientBrush> </Ellipse.Fill> </Ellipse> <!-- Second Ellipse (Forward2) - Another expanding ellipse, but starts later than Forward1 --> <Ellipse x:Name="EclipseForward2" Height="50" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center"> <Ellipse.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#ED4264" Offset="0.0" /> <GradientStop Color="#cbad6d" Offset="1.0" /> </LinearGradientBrush> </Ellipse.Fill> </Ellipse> <!-- Third Ellipse (Forward3) - Another expanding ellipse, starts even later --> <Ellipse x:Name="EclipseForward3" Height="50" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center"> <Ellipse.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#ED4264" Offset="0.0" /> <GradientStop Color="#cbad6d" Offset="1.0" /> </LinearGradientBrush> </Ellipse.Fill> </Ellipse> <!-- First Ellipse (Backward1) - Represents the outermost contracting ellipse when the button is unchecked --> <Ellipse x:Name="EclipseBackward1" Height="50" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center"> <!-- Ellipse Fill with a gradient from #ef32d9 to #89fffd --> <Ellipse.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#ef32d9" Offset="0.0" /> <GradientStop Color="#89fffd" Offset="1.0" /> </LinearGradientBrush> </Ellipse.Fill> </Ellipse> <!-- Second Ellipse (Backward2) - Another contracting ellipse, starts later than Backward1 --> <Ellipse x:Name="EclipseBackward2" Height="50" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center"> <Ellipse.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#ef32d9" Offset="0.0" /> <GradientStop Color="#89fffd" Offset="1.0" /> </LinearGradientBrush> </Ellipse.Fill> </Ellipse> <!-- Third Ellipse (Backward3) - Another contracting ellipse, starts even later --> <Ellipse x:Name="EclipseBackward3" Height="50" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center"> <Ellipse.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#ef32d9" Offset="0.0" /> <GradientStop Color="#89fffd" Offset="1.0" /> </LinearGradientBrush> </Ellipse.Fill> </Ellipse> <!-- Execute Toggle Button - The main button in the center --> <ToggleButton x:Name="Execute" Height="55" Width="55" HorizontalAlignment="Center" VerticalAlignment="Center" > <ToggleButton.Template> <ControlTemplate TargetType="ToggleButton"> <!-- Border around the button with rounded corners --> <Border x:Name="border" Background="Transparent" CornerRadius="30"> <Grid x:Name="ExecuteButtonIconImageGrid"> <!-- Button icon image centered inside the button --> <Image x:Name="ExecuteIconImage" Source="icon.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid> </Border> <!-- Triggers for visual states (hover, checked) --> <ControlTemplate.Triggers> <!-- Mouse hover trigger --> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" TargetName="border"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#ED4264" Offset="0.0" /> <GradientStop Color="#cbad6d" Offset="1.0" /> </LinearGradientBrush> </Setter.Value> </Setter> </Trigger> <!-- Button checked trigger --> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" TargetName="border"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#ED4264" Offset="0.0" /> <GradientStop Color="#cbad6d" Offset="1.0" /> </LinearGradientBrush> </Setter.Value> </Setter> </Trigger> <!-- MultiTrigger: Hovering while the button is unchecked --> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsMouseOver" Value="True" /> <Condition Property="IsChecked" Value="False" /> </MultiTrigger.Conditions> <Setter Property="Background" TargetName="border"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#ef32d9" Offset="0.0" /> <GradientStop Color="#89fffd" Offset="1.0" /> </LinearGradientBrush> </Setter.Value> </Setter> </MultiTrigger> </ControlTemplate.Triggers> </ControlTemplate> </ToggleButton.Template> <!-- Triggers for button actions (Checked, Unchecked) --> <ToggleButton.Triggers> <!-- When the button is checked (clicked) --> <EventTrigger RoutedEvent="ToggleButton.Checked"> <EventTrigger.Actions> <!-- Start the forward expanding animations --> <BeginStoryboard x:Name="Ellipse_Activated"> <Storyboard> <!-- Forward1 Animation (Expanding and fading out) --> <DoubleAnimation BeginTime="00:00:00" Duration="00:00:01.5" From="50" To="150" Storyboard.TargetProperty="(Ellipse.Width)" Storyboard.TargetName="EclipseForward1" RepeatBehavior="Forever" /> <DoubleAnimation BeginTime="00:00:00" Duration="00:00:01.5" From="50" To="150" Storyboard.TargetProperty="(Ellipse.Height)" Storyboard.TargetName="EclipseForward1" RepeatBehavior="Forever" /> <DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EclipseForward1" From="1.0" To="0.0" BeginTime="00:00:00" Duration="00:00:01.5" RepeatBehavior="Forever" /> <!-- Forward2 Animation (Starts 1 second later) --> <DoubleAnimation BeginTime="00:00:00.5" Duration="00:00:01.5" From="50" To="150" Storyboard.TargetProperty="(Ellipse.Width)" Storyboard.TargetName="EclipseForward2" RepeatBehavior="Forever" /> <DoubleAnimation BeginTime="00:00:00.5" Duration="00:00:01.5" From="50" To="150" Storyboard.TargetProperty="(Ellipse.Height)" Storyboard.TargetName="EclipseForward2" RepeatBehavior="Forever" /> <DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EclipseForward2" From="1.0" To="0.0" BeginTime="00:00:00.5" Duration="00:00:01.5" RepeatBehavior="Forever" /> <!-- Forward3 Animation (Starts 2 seconds later) --> <DoubleAnimation BeginTime="00:00:01" Duration="00:00:01.5" From="50" To="150" Storyboard.TargetProperty="(Ellipse.Width)" Storyboard.TargetName="EclipseForward3" RepeatBehavior="Forever" /> <DoubleAnimation BeginTime="00:00:01" Duration="00:00:01.5" From="50" To="150" Storyboard.TargetProperty="(Ellipse.Height)" Storyboard.TargetName="EclipseForward3" RepeatBehavior="Forever" /> <DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EclipseForward3" From="1.0" To="0.0" BeginTime="00:00:01" Duration="00:00:01.5" RepeatBehavior="Forever" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> <!-- When the button is unchecked --> <EventTrigger RoutedEvent="ToggleButton.Unchecked"> <EventTrigger.Actions> <!-- Stop the forward animation --> <RemoveStoryboard BeginStoryboardName="Ellipse_Activated" /> <!-- Start the backward contracting animations --> <BeginStoryboard x:Name="Ellipse_Deactivated"> <Storyboard> <!-- Backward1 Animation (Contracting and fading in) --> <DoubleAnimation BeginTime="00:00:00" Duration="00:00:01.5" From="150" To="50" Storyboard.TargetProperty="(Ellipse.Width)" Storyboard.TargetName="EclipseBackward1" /> <DoubleAnimation BeginTime="00:00:00" Duration="00:00:01.5" From="150" To="50" Storyboard.TargetProperty="(Ellipse.Height)" Storyboard.TargetName="EclipseBackward1" /> <DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EclipseBackward1" From="0.0" To="1.0" BeginTime="00:00:00" Duration="00:00:01.5" /> <!-- Backward2 Animation (Starts 1 second later) --> <DoubleAnimation BeginTime="00:00:00" Duration="00:00:01" From="125" To="50" Storyboard.TargetProperty="(Ellipse.Width)" Storyboard.TargetName="EclipseBackward2" /> <DoubleAnimation BeginTime="00:00:00" Duration="00:00:01" From="125" To="50" Storyboard.TargetProperty="(Ellipse.Height)" Storyboard.TargetName="EclipseBackward2" /> <DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EclipseBackward2" From="0.0" To="1.0" BeginTime="00:00:00" Duration="00:00:01" /> <!-- Backward3 Animation (Starts 2 seconds later) --> <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.5" From="100" To="50" Storyboard.TargetProperty="(Ellipse.Width)" Storyboard.TargetName="EclipseBackward3" /> <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.5" From="100" To="50" Storyboard.TargetProperty="(Ellipse.Height)" Storyboard.TargetName="EclipseBackward3" /> <DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EclipseBackward3" From="0.0" To="1.0" BeginTime="00:00:00" Duration="00:00:00.5" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </ToggleButton.Triggers> </ToggleButton> </Grid> <!--End of Execute Button Grid--> </Grid> <!--End of the main grid--> </UserControl> |