ui/App.xaml

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="pXLabs MS Update Tool" SizeToContent="Height" Width="1326"
        WindowStartupLocation="CenterScreen">
    <Grid Margin="0" VerticalAlignment="Top">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/> <!-- Menu -->
            <RowDefinition Height="Auto"/> <!-- Top Controls -->
            <RowDefinition Height="210"/> <!-- DataGrid and Output -->
            <RowDefinition Height="Auto"/> <!-- CMUpdate/Update/Policy -->
            <RowDefinition Height="400"/> <!-- Output -->
            <RowDefinition Height="Auto"/> <!-- Status Bar -->
        </Grid.RowDefinitions>
 
        <!-- MenuStrip -->
        <Menu Grid.Row="0">
            <MenuItem Header="_Intune">
                <MenuItem Header="Invoke Device Sync" x:Name="menuItem_InvokeDeviceSync"/>
                <MenuItem Header="Get Device Status" x:Name="menuItem_GetDeviceStatus"/>
                <MenuItem Header="Get Compliance State" x:Name="menuItem_GetComplianceState"/>
                <MenuItem Header="Get Assigned Configurations" x:Name="menuItem_GetAssignedConfigurations"/>
                <MenuItem Header="Get Update Policy" x:Name="menuItem_GetIntuneUpdatePolicy"/>
            </MenuItem>
            <MenuItem Header="_Theme">
                <MenuItem Header="Dark" x:Name="menuItem_DarkTheme"/>
                <MenuItem Header="Light" x:Name="menuItem_LightTheme"/>
                <MenuItem Header="Monokai" x:Name="menuItem_MonokaiTheme"/>
                <MenuItem Header="Nord" x:Name="menuItem_NordTheme"/>
                <MenuItem Header="EverForest" x:Name="menuItem_EverForestTheme"/>
            </MenuItem>
        </Menu>
 
        <!-- Top Control Groups -->
        <Grid Grid.Row="1" Margin="10">
            <!-- Computer Group -->
            <GroupBox Header="Computer" Margin="0,0,0,0" HorizontalAlignment="Left" Width="360">
                <StackPanel Orientation="Horizontal">
                    <TextBox x:Name="textbox_ComputerName" Width="134" FontSize="12" Margin="5"/>
                    <Button x:Name="button_Ping" Content="Ping" Width="92" Margin="5"/>
                    <Button x:Name="button_Clear" Content="Clear" Width="92" Margin="5"/>
                </StackPanel>
            </GroupBox>
 
            <!-- Device Tools Group -->
            <GroupBox Header="Device Tools" Margin="0,0,0,0" HorizontalAlignment="Right" Width="560">
                <StackPanel Orientation="Horizontal">
                    <Button x:Name="button_EventViewer" Content="Event Viewer" Width="92" Margin="5"/>
                    <Button x:Name="button_ExplorerHere" Content="Explorer here" Width="92" Margin="5"/>
                    <Button x:Name="button_PSSessionHere" Content="PSSession here" Width="92" Margin="5"/>
                    <Button x:Name="button_CheckServices" Content="Check Services" Width="92" Margin="5" />
                    <Button x:Name="button_ResetWUComponents" Content="Reset WU Components" Width="130" Margin="5"/>
                </StackPanel>
            </GroupBox>
        </Grid>
 
        <!-- DataGrid -->
        <Grid Grid.Row="2" Margin="10">
            <Grid.RowDefinitions>
                <RowDefinition Height="2*"/> <!-- DataGrid -->
                <RowDefinition Height="Auto"/> <!-- ProgressBar -->
            </Grid.RowDefinitions>
             
            <DataGrid x:Name="datagridview_UpdateList" Grid.Row="0" Margin="0,0,0,5" AutoGenerateColumns="True" IsReadOnly="True">
            <!-- <DataGrid.RowStyle>
                    <Style TargetType="DataGridRow">
                        <Setter Property="Foreground" Value="{DynamicResource DataGridForeground}" />
                        <Setter Property="Background">
                            <Setter.Value>
                                <SolidColorBrush Color="{DynamicResource DataGridRowBackgroundColor}" />
                            </Setter.Value>
                        </Setter>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsRunning}" Value="True">
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard RepeatBehavior="Forever" AutoReverse="True">
                                            <ColorAnimation
                                                Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
                                                To="{DynamicResource HighlightColorColor}"
                                                Duration="0:0:0.5" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.EnterActions>
                                <DataTrigger.ExitActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <ColorAnimation
                                                Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
                                                To="{DynamicResource DataGridRowBackgroundColor}"
                                                Duration="0:0:0.2" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.ExitActions>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGrid.RowStyle> -->
                <DataGrid.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Install Update" x:Name="menuItem_InstallUpdate"/>
                    </ContextMenu>
                </DataGrid.ContextMenu>
            </DataGrid>
            <ProgressBar x:Name="progressbar_Status" Grid.Row="1" Height="20" Minimum="0" Maximum="100" Value="0" Margin="0" Visibility="Collapsed" />
        </Grid>
 
        <!-- Middle Control Groups -->
        <Grid Grid.Row="3" Margin="10">
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
                <!-- CMUpdate Group -->
                <GroupBox x:Name="groupbox_CMUpdate" Header="MECM Update" Margin="0,0,0,10" Width="430">
                    <StackPanel Orientation="Horizontal">
                        <Button x:Name="button_UpdateScan" Content="Update Scan" Width="130" Margin="5">
                            <Button.Resources>
                                <Storyboard x:Key="PulseAnimation" RepeatBehavior="Forever" AutoReverse="True">
                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1.0" To="0.5" Duration="0:0:1"/>
                                </Storyboard>
                            </Button.Resources>
                        </Button>
                        <Button x:Name="button_UpdateEvaluation" Content="Update Evaluation" Width="130" Margin="5"/>
                        <Button x:Name="button_RestartCMAgent" Content="Restart CM Agent" Width="130" Margin="5"/>
                    </StackPanel>
                </GroupBox>
 
                <!-- Windows Update Group -->
                <GroupBox x:Name="groupbox_MSUpdate" Header="MS Windows Update (Autopatch)" Margin="0,0,0,10" Width="430">
                    <StackPanel Orientation="Horizontal">
                        <Button x:Name="button_GetUpdateHistory" Content="Get Update History" Width="130" Margin="5"/>
                        <Button x:Name="button_GetUpdates" Content="Get Updates" Width="130" Margin="5">
                            <Button.Resources>
                                <Storyboard x:Key="PulseAnimation" RepeatBehavior="Forever" AutoReverse="True">
                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1.0" To="0.5" Duration="0:0:1"/>
                                </Storyboard>
                            </Button.Resources>
                        </Button>
                        <Button x:Name="button_GetSettings" Content="Get Settings" Width="130" Margin="5"/>
                    </StackPanel>
                </GroupBox>
 
                <!-- Policy Group -->
                <GroupBox x:Name="groupbox_Policy" Header="Policy" Margin="0,0,0,10" Width="430">
                    <StackPanel Orientation="Horizontal">
                        <Button x:Name="button_RefreshGPO" Content="Refresh GPO" Width="130" Margin="5"/>
                        <Button x:Name="button_GetIntunePolicy" Content="Get Intune Policy" Width="130" Margin="5"/>
                        <Button x:Name="button_RefreshCMPolicy" Content="Refresh CM Policy" Width="130" Margin="5"/>
                    </StackPanel>
                </GroupBox>
            </StackPanel>
        </Grid>
 
        <!-- Output -->
        <Grid Grid.Row="4" Margin="10">
            <Grid.RowDefinitions>
                <RowDefinition Height="2*"/>
            </Grid.RowDefinitions>
 
            <RichTextBox x:Name="richtextbox_Output" Grid.Row="0" Margin="0,0,0,5" VerticalScrollBarVisibility="Auto" FontFamily="Consolas" FontSize="12" IsReadOnly="True"/>
        </Grid>
 
        <!-- StatusStrip -->
        <StatusBar Grid.Row="5" Margin="0">
            <StatusBarItem>
                <TextBlock Text="Status: Ready" x:Name="toolstripstatuslabel_Status"/>
            </StatusBarItem>
            <StatusBarItem>
                <TextBlock Text="SessionType: ..." x:Name="toolstripstatuslabel_SessionType"/>
            </StatusBarItem>
            <StatusBarItem>
                <TextBlock Text="UpdateMethod: ..." x:Name="toolstripstatuslabel_UpdateMethod"/>
            </StatusBarItem>
            <StatusBarItem>
                <TextBlock Text="DiskSpace: ..." x:Name="toolstripstatuslabel_Diskspace"/>
            </StatusBarItem>
        </StatusBar>
    </Grid>
</Window>