UI/UI.xaml

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="IntuneWinAppUtil GUI · 1.0.5"
        SizeToContent="WidthAndHeight"
        ResizeMode="CanResize"
        MinWidth="700"
        MinHeight="360"
        WindowStartupLocation="CenterScreen">
 
    <DockPanel Margin="15">
 
        <!-- ===== Header ===== -->
        <Border DockPanel.Dock="Top" Padding="0,0,0,12">
            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                <Image Name="HeaderIcon" Width="28" Height="28" Margin="0,0,8,0"/>
                <TextBlock Text="IntuneWinAppUtil GUI"
                           FontSize="24" FontWeight="Bold"
                           VerticalAlignment="Center"
                           TextOptions.TextFormattingMode="Ideal"
                           TextOptions.TextRenderingMode="ClearType"/>
                <!-- <TextBlock Text=" · 1.0.0"
                           FontSize="18" Foreground="Gray"
                           VerticalAlignment="Center" Margin="6,2,0,0"/> -->
            </StackPanel>
        </Border>
        <!-- ===== End Header ===== -->
 
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/> <!-- 0 Source -->
                <RowDefinition Height="Auto"/> <!-- 1 Setup -->
                <RowDefinition Height="Auto"/> <!-- 2 Output -->
                <RowDefinition Height="Auto"/> <!-- 3 Tool Path -->
                <RowDefinition Height="Auto"/> <!-- 4 Final filename -->
                <RowDefinition Height="Auto"/> <!-- 5 Run -->
                <RowDefinition Height="Auto"/> <!-- 6 Tooltip -->
                <RowDefinition Height="Auto"/> <!-- 7 GitHub link -->
            </Grid.RowDefinitions>
 
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="150"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
 
            <!-- Source Folder -->
            <Label Grid.Row="0" Grid.Column="0" Content="* Source Folder (-c):" VerticalAlignment="Top" Margin="0,5"/>
            <StackPanel Grid.Row="0" Grid.Column="1" Margin="0,5" MinHeight="35">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBox Name="SourceFolder" Grid.Column="0" Margin="0,0,10,0" Padding="4"/>
                    <Button Name="BrowseSource" Content="Browse..." Grid.Column="1" Width="80" Padding="2"/>
                </Grid>
            </StackPanel>
 
            <!-- Setup File -->
            <Label Grid.Row="1" Grid.Column="0" Content="* Setup File (-s):" VerticalAlignment="Top" Margin="0,5"/>
            <StackPanel Grid.Row="1" Grid.Column="1" Margin="0,5" MinHeight="35">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBox Name="SetupFile" Grid.Column="0" Margin="0,0,10,0" Padding="4"/>
                    <Button Name="BrowseSetup" Content="Browse..." Grid.Column="1" Width="80" Padding="2"/>
                </Grid>
 
                <TextBlock
                    Text="Remember that the setup file must be a valid MSI or EXE file.&#x0a;If I detect the existence of Invoke-AppDeployToolkit.exe in the source folder, I propose it as the default setup file, making life easier for those who use PSAppDeployToolkit."
                    Foreground="Gray"
                    FontSize="12"
                    Margin="0,5,0,0"
                    TextWrapping="Wrap"/>
            </StackPanel>
 
            <!-- Output Folder -->
            <Label Grid.Row="2" Grid.Column="0" Content="* Output Folder (-o):" VerticalAlignment="Top" Margin="0,5"/>
            <StackPanel Grid.Row="2" Grid.Column="1" Margin="0,5" MinHeight="35">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBox Name="OutputFolder" Grid.Column="0" Margin="0,0,10,0" Padding="4"/>
                    <Button Name="BrowseOutput" Content="Browse..." Grid.Column="1" Width="80" Padding="2"/>
                </Grid>
            </StackPanel>
 
            <!-- Tool Path -->
            <Label Grid.Row="3" Grid.Column="0" Content=" IntuneWinAppUtil Path:" VerticalAlignment="Top" Margin="0,5"/>
            <StackPanel Grid.Row="3" Grid.Column="1" Margin="0,5" MinHeight="50">
            <Grid>
                <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
 
                <TextBox Name="ToolPathBox" Grid.Column="0" Margin="0,0,10,0" Padding="4" HorizontalScrollBarVisibility="Auto"/>
                <Button Name="BrowseTool" Content="Browse..." Grid.Column="1" Width="90" Padding="2" Margin="0,0,10,0"/>
                <Button Name="DownloadTool" Content="Force download" Grid.Column="2" Width="110" Padding="2"/>
            </Grid>
 
            <!-- Version line with static link -->
            <TextBlock Margin="0,5,0,0" Foreground="Gray" FontSize="12" TextWrapping="Wrap">
                <Run Name="ToolVersionText" Text="IntuneWinAppUtil version: (not detected)"/>
                <Run Text=" (" />
                <Hyperlink NavigateUri="https://github.com/gioxx/IntuneWinAppUtilGUI/blob/main/Tools/IntuneWinAppUtilVersions.md" ToolTip="Open versions list page">Version history</Hyperlink>
                <Run Text=")" />
            </TextBlock>
 
            <TextBlock
                Text="If you want to use a specific version, please specify the path to the executable.&#x0a;You can also not specify (or search for) the path to the executable. If not specified, the latest version of the tool will be downloaded and the field will be automatically filled in.&#x0a;You can also use, at any time, the 'Force download' button to download the latest available version from GitHub."
                Foreground="Gray"
                FontSize="12"
                Margin="0,5,0,0"
                TextWrapping="Wrap"/>
            </StackPanel>
 
            <!-- Final Filename -->
            <Label Grid.Row="4" Grid.Column="0" Content=" Final filename:" VerticalAlignment="Top" Margin="0,5"/>
            <StackPanel Grid.Row="4" Grid.Column="1" Margin="0,5" MinHeight="35">
                <TextBox Name="FinalFilename" Margin="0,5" Padding="4"/>
 
                <TextBlock
                    Text="If I detect the existence of Invoke-AppDeployToolkit.ps1 in the source folder, I propose a default name based on the application name and version extracted from the script."
                    Foreground="Gray"
                    FontSize="12"
                    Margin="0,5,0,0"
                    TextWrapping="Wrap"/>
            </StackPanel>
 
            <!-- Buttons -->
            <Grid Grid.Row="5" Grid.Column="1" Margin="0,10,0,0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="10"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="10"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
 
                <Button Name="RunButton" Content="🚀 Run" Width="100" Height="30" Grid.Column="0" Padding="2"/>
                <Button Name="ClearButton" Content="🧽 Clear" Width="100" Height="30" Grid.Column="2" Padding="2"/>
                <Button Name="ExitButton" Content="🚪 Exit" Width="100" Height="30" Grid.Column="4" Padding="2"/>
            </Grid>
 
            <!-- Info tooltip -->
            <TextBlock Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2"
            Text="⚠️ Source folder, setup file and output folder are required (*).&#x0a;ℹ️ Final filename is optional and used for renaming the .intunewin file. If not provided, the tool will generate a name based on the source folder.&#x0a;ℹ️ IntuneWinAppUtil Path is also optional. If not provided, the tool will automatically download the latest version from GitHub.&#x0a;&#x0a;Press ESC on the keyboard to close the application.&#x0a;Click on 'Run' button or press ENTER on the keyboard to execute the IntuneWinAppUtil with the provided parameters."
            Foreground="Gray" FontSize="12" Margin="0,20,0,0" TextWrapping="Wrap"/>
 
            <!-- GitHub Link -->
            <TextBlock Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="2"
                    HorizontalAlignment="Right" FontSize="11" Margin="0,6,0,0">
                <Run Text="Gioxx, 2025 ❤️ " />
                <Hyperlink NavigateUri="https://github.com/gioxx/IntuneWinAppUtilGUI">
                    Available on GitHub
                </Hyperlink>
            </TextBlock>
        </Grid>
    </DockPanel>
</Window>