Lots of changes :)

This commit is contained in:
rbalsleyMSFT
2025-02-06 13:00:11 -08:00
committed by rbalsleyMSFT
parent 837d4ef7ee
commit 735c1ce688
2 changed files with 629 additions and 582 deletions
+306 -304
View File
@@ -1,9 +1,9 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="FFU Builder UI"
Height="600"
Width="900">
Height="750"
Width="980">
<!--
─────────────────────────────────────────────────────────────────
1) Window.Resources:
@@ -17,7 +17,6 @@
<Setter.Value>
<ControlTemplate TargetType="Expander">
<StackPanel>
<!-- Header Toggle -->
<ToggleButton x:Name="HeaderToggle"
IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
@@ -38,7 +37,6 @@
</Setter>
</Style>
</ToggleButton.Style>
<!-- Text + Arrow side by side -->
<StackPanel Orientation="Horizontal">
<TextBlock Text="Optional Features"
@@ -50,13 +48,11 @@
VerticalAlignment="Center"/>
</StackPanel>
</ToggleButton>
<!-- Expanded content -->
<ContentPresenter x:Name="ExpandSite"
Visibility="Collapsed"
Margin="0,4,0,0"/>
</StackPanel>
<!-- Trigger: Show content, swap arrow to “▲” when expanded -->
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="True">
@@ -76,20 +72,149 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- =============================
Main TabControl with 5 tabs
============================= -->
<!-- TabControl with multiple tabs -->
<TabControl TabStripPlacement="Left"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
FontSize="14"
Padding="10"
Grid.Row="0">
<!-- TAB: Home -->
<TabItem Header="Home" Padding="20">
<Grid Margin="10">
<TextBlock Text="Welcome to FFU Builder"
FontSize="20"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</TabItem>
<!-- TAB 1: Basic -->
<TabItem Header="Basic" Padding="20">
<!-- TAB: Build -->
<TabItem Header="Build" Padding="20">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<Grid Margin="10">
<!-- Define 10 rows for the Build tab -->
<Grid.RowDefinitions>
<!-- Row 0: Header -->
<RowDefinition Height="Auto"/>
<!-- Row 1: FFU Development Path -->
<RowDefinition Height="Auto"/>
<!-- Row 2: Custom FFU Name Template -->
<RowDefinition Height="Auto"/>
<!-- Row 3: FFU Capture Location -->
<RowDefinition Height="Auto"/>
<!-- Row 4: Share Name -->
<RowDefinition Height="Auto"/>
<!-- Row 5: Username -->
<RowDefinition Height="Auto"/>
<!-- Row 6: General Build Options Header -->
<RowDefinition Height="Auto"/>
<!-- Row 7: General Build Options Checkboxes -->
<RowDefinition Height="Auto"/>
<!-- Row 8: Build USB Drive Header -->
<RowDefinition Height="Auto"/>
<!-- Row 9: Build USB Drive Options Grid -->
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Row 0: Header -->
<TextBlock Grid.Row="0" Text="FFU Build Settings" FontWeight="Bold" FontSize="16" Margin="0,0,0,10"/>
<!-- Row 1: FFU Development Path -->
<Grid Grid.Row="1" Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="FFU Development Path" VerticalAlignment="Center"/>
<TextBox x:Name="txtFFUDevPath" Grid.Column="1" Margin="5" VerticalAlignment="Center"/>
<Button x:Name="btnBrowseFFUDevPath" Grid.Column="2" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center" ToolTip="Browse for FFU development folder."/>
</Grid>
<!-- Row 2: Custom FFU Name Template -->
<Grid Grid.Row="2" Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Custom FFU Name Template" VerticalAlignment="Center"/>
<TextBox x:Name="txtCustomFFUNameTemplate" Grid.Column="1" Margin="5" VerticalAlignment="Center"/>
</Grid>
<!-- Row 3: FFU Capture Location -->
<Grid Grid.Row="3" Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="FFU Capture Location" VerticalAlignment="Center"/>
<TextBox x:Name="txtFFUCaptureLocation" Grid.Column="1" Margin="5" VerticalAlignment="Center"/>
<Button x:Name="btnBrowseFFUCaptureLocation" Grid.Column="2" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center" ToolTip="Browse for FFU capture location."/>
</Grid>
<!-- Row 4: Share Name -->
<Grid Grid.Row="4" Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Share Name" VerticalAlignment="Center"/>
<TextBox x:Name="txtShareName" Grid.Column="1" Margin="5" VerticalAlignment="Center"/>
</Grid>
<!-- Row 5: Username -->
<Grid Grid.Row="5" Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Username" VerticalAlignment="Center"/>
<TextBox x:Name="txtUsername" Grid.Column="1" Margin="5" VerticalAlignment="Center"/>
</Grid>
<!-- Row 6: General Build Options Header -->
<TextBlock Grid.Row="6" Text="General Build Options" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/>
<!-- Row 7: General Build Options Checkboxes -->
<WrapPanel Grid.Row="7" Margin="0,5">
<CheckBox x:Name="chkCompactOS" Content="Compact OS" Margin="5" VerticalAlignment="Center" ToolTip="Compact the OS during FFU build."/>
<CheckBox x:Name="chkOptimize" Content="Optimize" Margin="5" VerticalAlignment="Center" ToolTip="Optimize the FFU file."/>
<CheckBox x:Name="chkCreateCaptureMedia" Content="Create Capture Media" Margin="5" VerticalAlignment="Center" ToolTip="Create capture media for FFU."/>
<CheckBox x:Name="chkCreateDeploymentMedia" Content="Create Deployment Media" Margin="5" VerticalAlignment="Center" ToolTip="Create deployment media."/>
</WrapPanel>
<!-- Row 8: Build USB Drive Header -->
<TextBlock Grid.Row="8" Text="Build USB Drive" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/>
<!-- Row 9: Build USB Drive Options Grid -->
<Grid Grid.Row="9" Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Left Column: USB Drive Options -->
<StackPanel Grid.Column="0" Margin="5">
<CheckBox x:Name="chkBuildUSBDrive" Content="Build USB Drive" Margin="5" VerticalAlignment="Center" ToolTip="Partition and format a USB drive and copy the captured FFU to the drive."/>
<CheckBox x:Name="chkPromptExternalHardDiskMedia" Content="Prompt External Hard Disk Media" Margin="5" VerticalAlignment="Center" ToolTip="Prompt before using external hard disk media."/>
<CheckBox x:Name="chkAllowExternalHardDiskMedia" Content="Allow External Hard Disk Media" Margin="5" VerticalAlignment="Center" ToolTip="Allow use of external hard disk media."/>
</StackPanel>
<!-- Right Column: USB Drive Modification -->
<StackPanel Grid.Column="1" Margin="5">
<TextBlock Text="USB Drive Modification" FontWeight="Bold" FontSize="16" Margin="5,0,0,5"/>
<CheckBox x:Name="chkCopyAutopilot" Content="Copy Autopilot" Margin="5" VerticalAlignment="Center" ToolTip="Copy the Autopilot folder to the deployment partition."/>
<CheckBox x:Name="chkCopyUnattend" Content="Copy Unattend" Margin="5" VerticalAlignment="Center" ToolTip="Copy the Unattend folder to the deployment partition."/>
<CheckBox x:Name="chkCopyPPKG" Content="Copy PPKG" Margin="5" VerticalAlignment="Center" ToolTip="Copy the PPKG folder to the deployment partition."/>
</StackPanel>
</Grid>
</Grid>
</ScrollViewer>
</TabItem>
<!-- TAB: Hyper-V Settings -->
<TabItem Header="Hyper-V Settings" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
@@ -97,114 +222,144 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- FFU Name -->
<!-- Row 0: VM Switch Name -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="FFU Name:"/>
<Image x:Name="imgFFUNameInfo"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="Enter a unique name for the FFU. Example: {WindowsRelease}_{WindowsVersion}_{SKU}_{yyyy}-{MM}-{dd}_{HH}{mm}"
Cursor="Arrow"/>
</StackPanel>
<TextBox x:Name="txtFFUName"
Grid.Row="0" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- FFU Dev Path -->
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="FFU Development Path:"/>
<Image x:Name="imgFFUDevPathInfo"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="Defaults to the location the script is run from."
Cursor="Arrow"/>
</StackPanel>
<Grid Grid.Row="1" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtFFUDevPath"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseFFUDevPath"
Grid.Column="1"
Content="Browse..."
Width="80"
Margin="5,0,0,0"
VerticalAlignment="Center"
ToolTip="Browse for FFU Development folder."/>
</Grid>
<!-- VM Switch Name -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="VM Switch Name:"/>
<TextBlock Text="VM Switch Name" />
<Image x:Name="imgVMSwitchNameInfo"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="Name of the Hyper-V virtual switch."
ToolTip="Select the Hyper-V virtual switch."
Cursor="Arrow"/>
</StackPanel>
<ComboBox x:Name="cmbVMSwitchName"
Grid.Row="2" Grid.Column="1"
Grid.Row="0" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- Custom VM Switch Name -->
<!-- Row 1: Custom VM Switch Name -->
<TextBox x:Name="txtCustomVMSwitchName"
Grid.Row="3" Grid.Column="1"
Grid.Row="1" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Visibility="Collapsed"
ToolTip="Enter your custom VM Switch Name."/>
<!-- VM Host IP Address -->
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="VM Host IP Address:"/>
ToolTip="Enter your custom VM Switch Name if 'Other' is selected."/>
<!-- Row 2: VM Host IP Address -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="VM Host IP Address" />
<Image x:Name="imgVMHostIPAddressInfo"
Width="16" Height="16"
Margin="5,0,0,0"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="IP address of the Hyper-V host machine."
Cursor="Arrow"/>
</StackPanel>
<TextBox x:Name="txtVMHostIPAddress"
Grid.Row="4" Grid.Column="1"
Grid.Row="2" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- Row 3: Disk Size (GB) -->
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Disk Size (GB)" />
<Image x:Name="imgDiskSizeInfo"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="Enter the size of the virtual hard disk in GB (e.g. 30)."
Cursor="Arrow"/>
</StackPanel>
<TextBox x:Name="txtDiskSize"
Grid.Row="3" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Text="30"/>
<!-- Row 4: Memory (GB) -->
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Memory (GB)" />
<Image x:Name="imgMemoryInfo"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="Enter the amount of RAM for the VM in GB (e.g. 4)."
Cursor="Arrow"/>
</StackPanel>
<TextBox x:Name="txtMemory"
Grid.Row="4" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Text="4"/>
<!-- Row 5: Processors -->
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Processors" />
<Image x:Name="imgProcessorsInfo"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="Enter the number of virtual processors (e.g. 4)."
Cursor="Arrow"/>
</StackPanel>
<TextBox x:Name="txtProcessors"
Grid.Row="5" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Text="4"/>
<!-- Row 6: VM Location -->
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="VM Location" />
<Image x:Name="imgVMLocationInfo"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="Enter the folder path where the VM files will be stored."
Cursor="Arrow"/>
</StackPanel>
<TextBox x:Name="txtVMLocation"
Grid.Row="6" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Text="{x:Static sys:Environment.CurrentDirectory}"/>
<!-- Row 7: Logical Sector Size -->
<StackPanel Grid.Row="7" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Logical Sector Size" />
<Image x:Name="imgLogicalSectorSizeInfo"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="Select the logical sector size (512 or 4096 bytes)."
Cursor="Arrow"/>
</StackPanel>
<ComboBox x:Name="cmbLogicalSectorSize"
Grid.Row="7" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Left">
<ComboBoxItem Content="512" IsSelected="True"/>
<ComboBoxItem Content="4096"/>
</ComboBox>
</Grid>
</TabItem>
<!-- TAB 2: Windows Settings -->
<!-- TAB: Windows Settings -->
<TabItem Header="Windows Settings" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <!-- row 0: ISO -->
<RowDefinition Height="Auto"/> <!-- row 1: Release -->
<RowDefinition Height="Auto"/> <!-- row 2: Version -->
<RowDefinition Height="Auto"/> <!-- row 3: Arch -->
<RowDefinition Height="Auto"/> <!-- row 4: Lang -->
<RowDefinition Height="Auto"/> <!-- row 5: SKU -->
<RowDefinition Height="Auto"/> <!-- row 6: Media Type -->
<RowDefinition Height="Auto"/> <!-- row 7: Product Key -->
<RowDefinition Height="*" /> <!-- row 8: Expander -->
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- (0) ISO Path -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows ISO Path:" VerticalAlignment="Center"/>
<TextBlock Text="Windows ISO Path" VerticalAlignment="Center"/>
<Image x:Name="imgISOPathInfo"
Width="16" Height="16" Margin="5,0,0,0"
ToolTip="Specify the full path to the Windows ISO file."
@@ -227,58 +382,49 @@
VerticalAlignment="Center"
ToolTip="Browse for a Windows ISO file."/>
</Grid>
<!-- (1) Windows Release -->
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows Release:" VerticalAlignment="Center"/>
<TextBlock Text="Windows Release" VerticalAlignment="Center"/>
</StackPanel>
<ComboBox x:Name="cmbWindowsRelease"
Grid.Row="1"
Grid.Column="1"
Grid.Row="1" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- (2) Windows Version -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows Version:" VerticalAlignment="Center"/>
<TextBlock Text="Windows Version" VerticalAlignment="Center"/>
</StackPanel>
<ComboBox x:Name="cmbWindowsVersion"
Grid.Row="2"
Grid.Column="1"
Grid.Row="2" Grid.Column="1"
Margin="5"
Width="120"
VerticalAlignment="Center"
HorizontalAlignment="Left"
IsEnabled="False"/>
<!-- (3) Windows Arch -->
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows Architecture:" VerticalAlignment="Center"/>
<TextBlock Text="Windows Architecture" VerticalAlignment="Center"/>
</StackPanel>
<ComboBox x:Name="cmbWindowsArch"
Grid.Row="3"
Grid.Column="1"
Grid.Row="3" Grid.Column="1"
Margin="5"
Width="120"
VerticalAlignment="Center"
HorizontalAlignment="Left"/>
<!-- (4) Windows Lang -->
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows Language:" VerticalAlignment="Center"/>
<TextBlock Text="Windows Language" VerticalAlignment="Center"/>
</StackPanel>
<ComboBox x:Name="cmbWindowsLang"
Grid.Row="4"
Grid.Column="1"
Grid.Row="4" Grid.Column="1"
Margin="5"
Width="120"
VerticalAlignment="Center"
HorizontalAlignment="Left"/>
<!-- (5) Windows SKU -->
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows SKU:" VerticalAlignment="Center"/>
<TextBlock Text="Windows SKU" VerticalAlignment="Center"/>
<Image x:Name="imgWindowsSKUInfo"
Width="16"
Height="16"
@@ -287,46 +433,38 @@
Cursor="Arrow"/>
</StackPanel>
<ComboBox x:Name="cmbWindowsSKU"
Grid.Row="5"
Grid.Column="1"
Grid.Row="5" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- (6) Media Type -->
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Media Type:" VerticalAlignment="Center"/>
<TextBlock Text="Media Type" VerticalAlignment="Center"/>
</StackPanel>
<ComboBox x:Name="cmbMediaType"
Grid.Row="6"
Grid.Column="1"
Grid.Row="6" Grid.Column="1"
Margin="5"
Width="120"
VerticalAlignment="Center"
HorizontalAlignment="Left"/>
<!-- (7) Product Key -->
<StackPanel Grid.Row="7" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Product Key:" VerticalAlignment="Center"/>
<TextBlock Text="Product Key" VerticalAlignment="Center"/>
</StackPanel>
<TextBox x:Name="txtProductKey"
Grid.Row="7"
Grid.Column="1"
Grid.Row="7" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- (8) Expander with top margin so it has spacing from "Product Key" above -->
<!-- (8) Expander for Optional Features -->
<Expander x:Name="expOptionalFeatures"
Style="{StaticResource MinimalExpanderNoHighlightStyle}"
Grid.Row="8"
Grid.Column="0"
Grid.ColumnSpan="2"
IsExpanded="False"
Margin="0,5,0,0"
Margin="0,5,0,0"
ExpandDirection="Down">
<!-- Optional Features content -->
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
Margin="0,5,0,0">
@@ -345,7 +483,20 @@
</Grid>
</TabItem>
<!-- TAB 3: Applications -->
<!-- TAB: Updates -->
<TabItem Header="Updates" Padding="20">
<StackPanel Margin="5">
<CheckBox x:Name="chkUpdateLatestCU" Content="Update Latest Cumulative Update" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest cumulative update."/>
<CheckBox x:Name="chkUpdateLatestNet" Content="Update .NET" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest .NET Framework update."/>
<CheckBox x:Name="chkUpdateLatestDefender" Content="Update Defender" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest Defender updates."/>
<CheckBox x:Name="chkUpdateEdge" Content="Update Edge" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest Microsoft Edge update."/>
<CheckBox x:Name="chkUpdateOneDrive" Content="Update OneDrive (Per-Machine)" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest OneDrive update for per-machine installation."/>
<CheckBox x:Name="chkUpdateLatestMSRT" Content="Update Microsoft Software Removal Tool (MSRT)" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest MSRT update."/>
<CheckBox x:Name="chkUpdatePreviewCU" Content="Update Preview Cumulative Update" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest preview cumulative update."/>
</StackPanel>
</TabItem>
<!-- TAB: Applications -->
<TabItem Header="Applications" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
@@ -355,19 +506,18 @@
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<CheckBox x:Name="chkInstallApps" Content="Install Apps" Margin="0,0,5,0"/>
<Image x:Name="imgInstallAppsInfo"
Width="16"
Height="16"
Cursor="Arrow"
ToolTip="Check to include additional applications in the FFU."/>
Height="16" Margin="5,0,0,0"
ToolTip="Check to include additional applications in the FFU."
Cursor="Arrow"/>
</StackPanel>
</Grid>
</TabItem>
<!-- TAB 4: M365 Apps/Office -->
<!-- TAB: M365 Apps/Office -->
<TabItem Header="M365 Apps/Office" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
@@ -380,8 +530,6 @@
<ColumnDefinition Width="250"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Install Office -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<CheckBox x:Name="chkInstallOffice" Content="Install Office" Margin="0,0,5,0"/>
<Image x:Name="imgInstallOfficeInfo"
@@ -389,94 +537,41 @@
Cursor="Arrow"
ToolTip="Check to install Microsoft Office as part of the FFU."/>
</StackPanel>
<!-- Office Path -->
<StackPanel x:Name="OfficePathStackPanel"
Grid.Row="1"
Grid.Column="0"
Orientation="Horizontal"
VerticalAlignment="Center"
Margin="0,5">
<TextBlock Text="Office Path:"/>
<StackPanel x:Name="OfficePathStackPanel" Grid.Row="1" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Office Path"/>
<Image x:Name="imgOfficePathInfo"
Width="16" Height="16"
Margin="5,0,0,0"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Path to the Microsoft Office installation."/>
</StackPanel>
<Grid x:Name="OfficePathGrid"
Grid.Row="1"
Grid.Column="1"
Margin="5">
<Grid x:Name="OfficePathGrid" Grid.Row="1" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtOfficePath"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseOfficePath"
Grid.Column="1"
Content="Browse..."
Width="80"
VerticalAlignment="Center"
ToolTip="Browse for Office installation folder."/>
<TextBox x:Name="txtOfficePath" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseOfficePath" Grid.Column="1" Content="Browse..." Width="80" VerticalAlignment="Center" ToolTip="Browse for Office installation folder."/>
</Grid>
<!-- Copy Office Config XML -->
<StackPanel x:Name="CopyOfficeConfigXMLStackPanel"
Grid.Row="2" Grid.Column="0"
Orientation="Horizontal"
Margin="0,5">
<StackPanel x:Name="CopyOfficeConfigXMLStackPanel" Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<CheckBox x:Name="chkCopyOfficeConfigXML" Content="Copy Office Configuration XML" Margin="0,0,5,0"/>
<Image x:Name="imgCopyOfficeConfigXMLInfo"
Width="16" Height="16"
Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Check to copy the Office Configuration XML."/>
<Image x:Name="imgCopyOfficeConfigXMLInfo" Width="16" Height="16" Margin="5,0,0,0" Cursor="Arrow" ToolTip="Check to copy the Office Configuration XML."/>
</StackPanel>
<!-- OfficeConfigurationXMLFile -->
<StackPanel x:Name="OfficeConfigurationXMLFileStackPanel"
Grid.Row="3"
Grid.Column="0"
Orientation="Horizontal"
VerticalAlignment="Center"
Margin="0,5"
Visibility="Collapsed">
<TextBlock Text="Office Configuration XML File:"/>
<Image x:Name="imgOfficeConfigXMLFileInfo"
Width="16" Height="16"
Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Select the Office Configuration XML file to copy."/>
<StackPanel x:Name="OfficeConfigurationXMLFileStackPanel" Grid.Row="3" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5" Visibility="Collapsed">
<TextBlock Text="Office Configuration XML File"/>
<Image x:Name="imgOfficeConfigXMLFileInfo" Width="16" Height="16" Margin="5,0,0,0" Cursor="Arrow" ToolTip="Select the Office Configuration XML file to copy."/>
</StackPanel>
<Grid x:Name="OfficeConfigurationXMLFileGrid"
Grid.Row="3"
Grid.Column="1"
Margin="5"
Visibility="Collapsed">
<Grid x:Name="OfficeConfigurationXMLFileGrid" Grid.Row="3" Grid.Column="1" Margin="5" Visibility="Collapsed">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtOfficeConfigXMLFilePath"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseOfficeConfigXMLFile"
Grid.Column="1"
Content="Browse..."
Width="80"
Margin="5,0,0,0"
VerticalAlignment="Center"
ToolTip="Browse for an Office Configuration XML file."/>
<TextBox x:Name="txtOfficeConfigXMLFilePath" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseOfficeConfigXMLFile" Grid.Column="1" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center" ToolTip="Browse for an Office Configuration XML file."/>
</Grid>
</Grid>
</TabItem>
<!-- TAB 5: DRIVERS -->
<!-- TAB: Drivers -->
<TabItem Header="Drivers" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
@@ -492,40 +587,19 @@
<ColumnDefinition Width="250"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Install Drivers -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkInstallDrivers" Content="Install Drivers to FFU" Margin="0,0,5,0"/>
<Image x:Name="imgInstallDriversInfo"
Width="16" Height="16"
Cursor="Arrow"
ToolTip="Use DISM to service drivers directly into the FFU."/>
<Image x:Name="imgInstallDriversInfo" Width="16" Height="16" Cursor="Arrow" ToolTip="Inject drivers directly into the FFU."/>
</StackPanel>
<!-- Copy Drivers -->
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkCopyDrivers" Content="Copy Drivers to USB drive" Margin="0,0,5,0"/>
<Image x:Name="imgCopyDriversInfo"
Width="16" Height="16"
Cursor="Arrow"
ToolTip="Copy the drivers folder to the USB deploy partition."/>
<Image x:Name="imgCopyDriversInfo" Width="16" Height="16" Cursor="Arrow" ToolTip="Copy the drivers folder to the USB deploy partition."/>
</StackPanel>
<!-- Download Drivers -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkDownloadDrivers" Content="Download Drivers" Margin="0,0,5,0"/>
<Image x:Name="imgDownloadDriversInfo"
Width="16" Height="16"
Cursor="Arrow"
ToolTip="Check to download drivers automatically."/>
<Image x:Name="imgDownloadDriversInfo" Width="16" Height="16" Cursor="Arrow" ToolTip="Check to download drivers automatically."/>
</StackPanel>
<!-- Make/Model -->
<StackPanel x:Name="spMakeModelSection"
Grid.Row="3"
Grid.ColumnSpan="2"
Visibility="Collapsed"
Margin="0">
<StackPanel x:Name="spMakeModelSection" Grid.Row="3" Grid.ColumnSpan="2" Visibility="Collapsed" Margin="0">
<Grid Margin="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
@@ -535,131 +609,59 @@
<ColumnDefinition Width="250"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Make -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock x:Name="txtMakeLabel" Text="Make: " VerticalAlignment="Center"/>
<Image x:Name="imgMakeInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Select the device manufacturer."/>
<Image x:Name="imgMakeInfo" Width="16" Height="16" Margin="5,0,0,0" Cursor="Arrow" ToolTip="Select the device manufacturer."/>
</StackPanel>
<ComboBox x:Name="cmbMake"
Grid.Row="0"
Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- Model -->
<ComboBox x:Name="cmbMake" Grid.Row="0" Grid.Column="1" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock x:Name="txtModelLabel" Text="Model: " VerticalAlignment="Center"/>
<Image x:Name="imgModelInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Enter the device model."/>
<Image x:Name="imgModelInfo" Width="16" Height="16" Margin="5,0,0,0" Cursor="Arrow" ToolTip="Enter the device model."/>
</StackPanel>
<TextBox x:Name="cmbModel"
Grid.Row="1"
Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<TextBox x:Name="cmbModel" Grid.Row="1" Grid.Column="1" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
</Grid>
</StackPanel>
<!-- Drivers Folder -->
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock Text="Drivers Folder:" VerticalAlignment="Center"/>
<Image x:Name="imgDriversFolderInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Path to the Drivers folder."/>
<Image x:Name="imgDriversFolderInfo" Width="16" Height="16" Margin="5,0,0,0" Cursor="Arrow" ToolTip="Path to the Drivers folder."/>
</StackPanel>
<Grid Grid.Row="4" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtDriversFolder"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseDriversFolder"
Grid.Column="1"
Content="Browse..."
Width="80"
Margin="5,0,0,0"
VerticalAlignment="Center"
ToolTip="Browse for Drivers folder."/>
<TextBox x:Name="txtDriversFolder" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseDriversFolder" Grid.Column="1" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center" ToolTip="Browse for Drivers folder."/>
</Grid>
<!-- Copy PE Drivers -->
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkCopyPEDrivers" Content="Copy PE Drivers" Margin="0,0,5,0"/>
<Image x:Name="imgCopyPEDriversInfo"
Width="16" Height="16"
Cursor="Arrow"
ToolTip="Copy local PE Drivers folder to the build."/>
<Image x:Name="imgCopyPEDriversInfo" Width="16" Height="16" Cursor="Arrow" ToolTip="Copy local PE Drivers folder to the build."/>
</StackPanel>
<!-- PE Drivers Folder -->
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock Text="PE Drivers Folder:" VerticalAlignment="Center"/>
<Image x:Name="imgPEDriversFolderInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Path to the PE Drivers folder."/>
<Image x:Name="imgPEDriversFolderInfo" Width="16" Height="16" Margin="5,0,0,0" Cursor="Arrow" ToolTip="Path to the PE Drivers folder."/>
</StackPanel>
<Grid Grid.Row="6" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtPEDriversFolder"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowsePEDrivers"
Grid.Column="1"
Content="Browse..."
Width="80"
Margin="5,0,0,0"
VerticalAlignment="Center"
ToolTip="Browse for PE Drivers folder."/>
<TextBox x:Name="txtPEDriversFolder" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowsePEDrivers" Grid.Column="1" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center" ToolTip="Browse for PE Drivers folder."/>
</Grid>
</Grid>
</TabItem>
</TabControl>
<!-- Progress Bar -->
<ProgressBar x:Name="progressBar"
Height="20"
Margin="0,10,0,0"
Grid.Row="1"
Visibility="Collapsed"/>
<ProgressBar x:Name="progressBar" Height="20" Margin="0,10,0,0" Grid.Row="1" Visibility="Collapsed"/>
<!-- Status Text -->
<TextBlock x:Name="txtStatus"
Grid.Row="2"
Margin="0,5,0,0"/>
<!-- Buttons (Build Config File / Build FFU) -->
<StackPanel Grid.Row="3"
Orientation="Horizontal"
HorizontalAlignment="Right"
Margin="0,0,20,20">
<Button x:Name="btnBuildConfig"
Content="Build Config File"
Width="150"
Margin="0,0,10,0"
FontSize="14"
Padding="10,5"/>
<Button x:Name="btnRun"
Content="Build FFU"
Width="120"
FontSize="14"
Padding="10,5"/>
<TextBlock x:Name="txtStatus" Grid.Row="2" Margin="0,5,0,0"/>
<!-- Buttons (Build Config File / Load Config File / Build FFU) -->
<StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,0,20,20">
<Button x:Name="btnBuildConfig" Content="Build Config File" Width="150" Margin="0,0,10,0" FontSize="14" Padding="10,5"/>
<Button x:Name="btnLoadConfig" Content="Load Config File" Width="150" Margin="0,0,10,0" FontSize="14" Padding="10,5"/>
<Button x:Name="btnRun" Content="Build FFU" Width="120" FontSize="14" Padding="10,5"/>
</StackPanel>
</Grid>
</Window>