Skip to content

Rework the Win11 Creator tab into a three step wizard - #4925

Draft
MyDrift-user wants to merge 3 commits into
ChrisTitusTech:mainfrom
MyDrift-user:feat/win11creator-ui-refresh
Draft

Rework the Win11 Creator tab into a three step wizard#4925
MyDrift-user wants to merge 3 commits into
ChrisTitusTech:mainfrom
MyDrift-user:feat/win11creator-ui-refresh

Conversation

@MyDrift-user

@MyDrift-user MyDrift-user commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Type of Change

  • New feature
  • Bug fix
  • Documentation update
  • Refactor
  • UI/UX improvement

Description

The Win11 Creator tab was one long page. All four steps sat on top of each other and appeared one by one as you got further, so the content kept jumping around and the status log was pushed down the page.

It is now a three step wizard. The steps sit in the header of the panel, and you can click an earlier step to go back until the image has been modified. There are also chevrons next to the content that do the same thing. While mounting or modifying is running you get a working page with a spinning icon, so it is clear the tool is busy and not stuck.

The edition dropdown and the driver checkbox moved from the mount step to the modify step. Both are settings for the modification, so that is where they belong.

The modify step now also lists what the run actually changes in the image. The list is written from what Invoke-WinUtilISOScript does, not from the docs, because the docs mention stripping unused editions and a component store cleanup that the script does not do.

When an ISO or a USB drive is finished, a panel shows what was written and where. Clean & Reset is now called Start Over. It sits at the bottom of the last step with a short line explaining it, since it is the normal way to start the next image and not something risky.

The status log moved into its own card on the right and stays visible the whole time.

Control names are unchanged apart from three things. WPFWin11ISOMountSection is gone since the mount step no longer exists as a page, and there are three new names: a label for the image file name and the two chevron buttons.

Demo

(Sorry for the EXTREMLY laggy video)

Aufzeichnung.2026-08-05.224204.-.edited.mp4

Verification

  • local compilation

Issue related to PR

N/A

- Turn the stacked sections into pages you can navigate between
- Move the edition picker and driver option to the modify step
- Show a working page while mounting and modifying run
- Show what the run changes and a finished panel with the output path
- Put the status log in its own card next to the steps
- Rename Clean & Reset to Start Over and move it below the actions
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added a redesigned Windows 11 Creator wizard with clear step navigation, status updates, progress indicators, and completion details.
    • Combined ISO selection and verification into one step and added dedicated steps for modification and export.
    • Added back/forward navigation and improved USB creation completion feedback.
    • Updated font sizing for Windows 11 Creator screens.
  • Bug Fixes

    • Improved recovery and reset behavior, including clearer “Start Over” actions and restored selection controls.
  • Documentation

    • Updated guides to reflect the streamlined three-step workflow and recovery process.

Walkthrough

The Win11 Creator ISO workflow was redesigned as a three-step wizard. PowerShell now centralizes wizard navigation and operation states. The UI adds structured output, USB completion, status logging, and Start Over behavior. Documentation and validation controls were updated.

Changes

Win11 Creator wizard

Layer / File(s) Summary
Wizard layout and controls
xaml/inputXML.xaml, config/themes.json, functions/private/Invoke-WinUtilFontScaling.ps1, pester/xaml.Tests.ps1
The ISO tab now uses Select, Modify, Working, and Output pages with navigation controls, status logging, completion panels, shared styles, and scaled font resources. Tests validate the new controls.
Workflow navigation and operation states
functions/private/Invoke-WinUtilISO.ps1, scripts/main.ps1
Set-WinUtilISOStep centralizes wizard page selection, navigation enablement, working labels, recovery, reset, and UI-thread updates. Back and forward handlers navigate between ISO selection and modification.
Output and USB completion flow
functions/private/Invoke-WinUtilISO.ps1, functions/private/Invoke-WinUtilISOUSB.ps1
Export and USB completion flows update output panels and status messages. Readiness messages direct the workflow to the modification step.
Workflow documentation
docs/src/content/docs/code-reference/architecture.mdx, docs/src/content/docs/guides/win11creator.mdx
Documentation now describes the three-step workflow, navigation, status log, recovery, driver injection, output, and Start Over behavior.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant MainHandlers
  participant InvokeWinUtilISO
  participant Win11ISO
  participant InvokeWinUtilISOUSB
  User->>MainHandlers: Select back or forward navigation
  MainHandlers->>InvokeWinUtilISO: Request wizard step change
  InvokeWinUtilISO->>Win11ISO: Update page, navigation, and working state
  InvokeWinUtilISO->>Win11ISO: Show output completion after export
  InvokeWinUtilISOUSB->>Win11ISO: Show USB completion status
Loading

Possibly related PRs

Suggested labels: new feature

Suggested reviewers: christitustech

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the primary change: converting the Win11 Creator tab into a three-step wizard.
Description check ✅ Passed The description accurately explains the wizard redesign, navigation, UI changes, workflow updates, and verification.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the ui update UI/UX improvements label Aug 5, 2026
- Take button text and icon colour from the button they sit in
- Stop the implicit TextBlock style painting a label background on buttons
- Colour step headers from the tab item state
- Use the label accent for headings and field labels like the other tabs
- Render button icon and label from a ContentTemplate, glyph goes in Tag
- Render the step header from a HeaderTemplate the same way
- Move the page scroll wrapper into the tab control template
- Derive the text styles from one another instead of repeating setters
@vyas-devgna

Copy link
Copy Markdown
Contributor

this is awesome

@ChrisTitusTech

Copy link
Copy Markdown
Owner

Drift is cooking...
image

@MyDrift-user

Copy link
Copy Markdown
Contributor Author

@coderabbitai please review

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

@MyDrift-user I will review pull request #4925.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot added the new feature New feature or request label Aug 9, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (1)
functions/private/Invoke-WinUtilISO.ps1 (1)

28-32: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Mark -Step as mandatory.

[ValidateSet] does not reject an omitted parameter. If a caller omits -Step, line 42 resolves $sync["WPFWin11ISOSection"], which is $null, and the assignment throws. Line 38 also silently disables every step. All current call sites pass -Step, so this is a guard for future callers.

🛡️ Proposed fix
     param(
+        [Parameter(Mandatory)]
         [ValidateSet("Select", "Modify", "Working", "Output")]
         [string]$Step,
         [string]$Label
     )

Also applies to: 42-42

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@functions/private/Invoke-WinUtilISO.ps1` around lines 28 - 32, Mark the Step
parameter in Invoke-WinUtilISO as mandatory while preserving its existing
ValidateSet values, so callers must provide a valid step before the function
accesses sync state or executes step-specific logic.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/src/content/docs/guides/win11creator.mdx`:
- Line 26: Update the introductory wizard description to hyphenate “three-step”
in the sentence beginning “The tab is a,” leaving the rest of the documentation
unchanged.
- Line 45: Remove the duplicated “Run Windows ISO Modification and Creator”
instruction in the Win11 creator guide, keeping a single copy before the
customization process description.
- Line 112: Update the cleanup section heading near the Start Over instructions
by removing the obsolete “Step 5” numeric label, using “Start Over (Optional)”
while preserving the existing cleanup content.
- Line 74: Remove the unsupported boot.wim driver-injection claim from the Step
2 description in win11creator.mdx, and update the corresponding boot.wim entry
in architecture.mdx to reflect that injection only targets install.wim.

In `@scripts/main.ps1`:
- Around line 520-528: Ensure the WPFWin11ISOBackButton and
WPFWin11ISOForwardButton click behavior is registered before the generic
per-control handler can intercept them: either move their existing Add_Click
handlers ahead of that registration or add explicit cases in Invoke-WPFButton
for both names that select WPFWin11ISOSelectSection and WPFWin11ISOModifySection
respectively.

In `@xaml/inputXML.xaml`:
- Around line 1574-1584: Update both chevron buttons, WPFWin11ISOBackButton and
the corresponding button near the following block, so their dimensions scale
with Win11StepTitleFontSize instead of remaining fixed at Width="44" and
Height="72". Use MinWidth/MinHeight with appropriate Padding or bind the width
and height to the scaled resource, ensuring the glyph remains fully visible at
large scale factors.
- Line 1913: Update the verification UI flow using WPFWin11ISOArchLabel so it is
populated from the ISO image architecture metadata alongside
WPFWin11ISOMountDriveLetter and WPFWin11ISOImageFile; if architecture is not
supported or displayed, remove the unused WPFWin11ISOArchLabel control and its
related references.

---

Nitpick comments:
In `@functions/private/Invoke-WinUtilISO.ps1`:
- Around line 28-32: Mark the Step parameter in Invoke-WinUtilISO as mandatory
while preserving its existing ValidateSet values, so callers must provide a
valid step before the function accesses sync state or executes step-specific
logic.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e00538db-98dc-44dc-b0f2-3419627ea40c

📥 Commits

Reviewing files that changed from the base of the PR and between f7c0723 and d2c1c7c.

📒 Files selected for processing (9)
  • config/themes.json
  • docs/src/content/docs/code-reference/architecture.mdx
  • docs/src/content/docs/guides/win11creator.mdx
  • functions/private/Invoke-WinUtilFontScaling.ps1
  • functions/private/Invoke-WinUtilISO.ps1
  • functions/private/Invoke-WinUtilISOUSB.ps1
  • pester/xaml.Tests.ps1
  • scripts/main.ps1
  • xaml/inputXML.xaml


---

The tab is a three step wizard. The step you are on is shown in the header row, and you can click an earlier step to go back to it until the image has been modified. The status log on the right stays visible throughout.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use a hyphen in “three-step.”

Change “The tab is a three step wizard” to “The tab is a three-step wizard.”

🧰 Tools
🪛 LanguageTool

[grammar] ~26-~26: Use a hyphen to join words.
Context: ...stallation. ::: --- The tab is a three step wizard. The step you are on is show...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/src/content/docs/guides/win11creator.mdx` at line 26, Update the
introductory wizard description to hyphenate “three-step” in the sentence
beginning “The tab is a,” leaving the rest of the documentation unchanged.

Source: Linters/SAST tools


Once the ISO is verified, WinUtil moves to this step and shows the mounted drive and image file. Choose your **edition** from the dropdown — Pro is selected by default if available — and tick **Inject current system drivers** if you want them.

Then click **Run Windows ISO Modification and Creator** to start the customization process. WinUtil will:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the duplicated modification instruction.

Line 45 repeats the sentence at Line 47. Keep one copy.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/src/content/docs/guides/win11creator.mdx` at line 45, Remove the
duplicated “Run Windows ISO Modification and Creator” instruction in the Win11
creator guide, keeping a single copy before the customization process
description.


**Optional: Driver Injection**
- If enabled, it injects all drivers from your current system into the install.wim and boot.wim — useful for offline installations on machines with missing drivers. This is an optional checkbox in Step 3.
- If enabled, it injects all drivers from your current system into the install.wim and boot.wim — useful for offline installations on machines with missing drivers. This is an optional checkbox in Step 2.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 8 \
  'boot\.wim|InstallImagePath|InstallImageIndex|Add-Driver|InjectCurrentSystemDrivers' \
  functions/private/Invoke-WinUtilISOScript.ps1 \
  functions/private/Invoke-WinUtilISO.ps1 \
  pester/win11creator.Tests.ps1 \
  docs/src/content/docs/code-reference/architecture.mdx \
  docs/src/content/docs/guides/win11creator.mdx

Repository: ChrisTitusTech/winutil

Length of output: 31152


Remove the unsupported boot.wim driver-injection claim.

The current driver-injection path only services install.wim with one mount, one Add-Driver, and one commit. Remove and boot.wim from docs/src/content/docs/guides/win11creator.mdx:74 and update the matching boot.wim entry in docs/src/content/docs/code-reference/architecture.mdx:265-267.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/src/content/docs/guides/win11creator.mdx` at line 74, Remove the
unsupported boot.wim driver-injection claim from the Step 2 description in
win11creator.mdx, and update the corresponding boot.wim entry in
architecture.mdx to reflect that injection only targets install.wim.

### Step 5 — Clean Up (Optional)

Click **Clean & Reset** to delete the temporary working directory (~10–15 GB) and return the tool to its initial state, ready for a new ISO. You will be asked to confirm before anything is deleted.
Click **Start Over** to delete the temporary working directory (~10–15 GB) and return the tool to its initial state, ready for a new ISO. You will be asked to confirm before anything is deleted.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the obsolete step number from the cleanup section.

The guide now defines only Steps 1–3, but the cleanup section containing this changed line is still titled Step 5 — Clean Up (Optional). Rename the heading to ### Start Over (Optional) or remove the numeric label.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/src/content/docs/guides/win11creator.mdx` at line 112, Update the
cleanup section heading near the Start Over instructions by removing the
obsolete “Step 5” numeric label, using “Start Over (Optional)” while preserving
the existing cleanup content.

Comment thread scripts/main.ps1
Comment on lines +520 to +528
# The chevrons only show where the neighbouring step is reachable, so each has a single destination
$sync["WPFWin11ISOBackButton"].Add_Click({
$sync["WPFWin11ISOSelectSection"].IsSelected = $true
})

$sync["WPFWin11ISOForwardButton"].Add_Click({
$sync["WPFWin11ISOModifySection"].IsSelected = $true
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Inspect the Invoke-WPFButton switch and its default branch.
fd -t f 'Invoke-WPFButton.ps1' | xargs -r cat -n

Repository: ChrisTitusTech/winutil

Length of output: 5353


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the surrounding Win11 ISO handlers in scripts/main.ps1.
sed -n '150,175p;512,530p' scripts/main.ps1 | cat -n

Repository: ChrisTitusTech/winutil

Length of output: 1975


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Check whether WPFWin11ISOBackButton and WPFWin11ISOForwardButton are declared as Button controls,
# and whether they appear elsewhere as configured feature buttons.
rg -n 'WPFWin11ISO(Base|Back|Forward|Modify|Select).*|WPFWin11ISOBackButton|WPFWin11ISOForwardButton' scripts scripts/main.ps1 scripts --glob '*.ps1' --glob '*.xaml' || true

python3 - <<'PY'
from pathlib import Path
import re

for path in Path('.').rglob('*.xaml'):
    if 'WPFWin11ISOBackButton' in path.read_text(errors='ignore') or 'WPFWin11ISOForwardButton' in path.read_text(errors='ignore'):
        print(path)

files = list(Path('.').rglob('*.ps1'))
text = '\n'.join(set(f.read_text(errors='ignore') for f in files))
patterns = ['WPFWin11ISOBackButton', 'WPFWin11ISOForwardButton']
for p in patterns:
    print(f"{p}: {text.count(p)}")
PY

Repository: ChrisTitusTech/winutil

Length of output: 1306


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect relevant XAML declarations and config references to establish whether the generic handler is attached.
sed -n '1,80p' xaml/inputXML.xaml | cat -n
printf '\n--- Back/Forward declarations ---\n'
rg -n -C 3 'WPFWin11ISOBackButton|WPFWin11ISOForwardButton' xaml/inputXML.xaml
printf '\n--- Feature config references ---\n'
rg -n '"WPFWin11ISO(Back|Forward)|WPFWin11ISO(Back|Forward)Button' -S . --glob '*.json' --glob '*.ps1' --glob '*.xaml' || true

Repository: ChrisTitusTech/winutil

Length of output: 6215


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Read the exact XAML declarations and surrounding code to determine whether the explicit handler overrides the generic handler and whether the generic handler calls Invoke-WPFButton twice.
sed -n '1568,1600p' xaml/inputXML.xaml | cat -n
printf '\n--- scripts/main.ps1 generic processing ---\n'
sed -n '140,156p;488,532p' scripts/main.ps1 | cat -n
printf '\n--- PowerShell parser/ParseBlock check ---\n'
python3 - <<'PY'
from pathlib import Path
import re
x = Path("xaml/inputXML.xaml").read_text()
needles = ['WPFWin11ISOBackButton', 'WPFWin11ISOForwardButton']
for n in needles:
    before = x.rfind('WPFWin11ISOBackButton' if n == 'WPFWin11ISOBackButton' else 'WPFWin11ISOForwardButton', 0, x.find(n)+100)
    snippet = x[:x.find(n, before, x.find(n, before) if n == 'WPFWin11ISOForwardButton' or n == 'WPFWin11ISOBackButton' else len(x))+200]
    print("\n---", n, "---")
    print(snippet)
EOF

Repository: ChrisTitusTech/winutil

Length of output: 5468


🌐 Web query:

PowerShell Add_Click registered event handlers add new handler or replace existing handler

💡 Result:

In PowerShell, calling the add_Click method (or any add_EventName method) on a.NET object registers a new event handler; it does not replace any existing handlers [1][2][3][4]. When an event occurs, all registered handlers are executed in the order they were added [1][3]. To manage this behavior, you have two primary approaches: 1. Use remove_Click to explicitly remove a specific handler. To successfully remove a handler, you must have a reference to the exact same script block object that was originally passed to the add_Click method [5][2][3]. Example: $handler = { Write-Host "Click event handled" } $button.add_Click($handler) # Later, to remove it: $button.remove_Click($handler) Note that if you pass a new script block (e.g., $button.remove_Click({... })), it will not remove the existing one because it is treated as a different object [5]. 2. Use a persistent handler with conditional logic. If you need to change functionality dynamically, register one permanent event handler that checks a variable or state property (such as the Tag property of the control) to determine what code to execute [2][6]. Example: $button.Tag = { Write-Host "Initial action" } $button.add_Click({ if ($this.Tag -is [scriptblock]) { & $this.Tag } }) # To change the action later: $button.Tag = { Write-Host "New action" } Using Register-ObjectEvent is an alternative approach that allows you to manage subscriptions via Unregister-Event, but it is typically used for background events and may introduce different execution behaviors compared to direct.NET event methods [2][7][8]. Direct add/remove methods are generally preferred for Windows Forms GUI controls for their performance and immediate execution [7].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
x = Path("xaml/inputXML.xaml").read_text()
for name in ["WPFWin11ISOBackButton", "WPFWin11ISOForwardButton"]:
    idx = x.find(f'Name="{name}"')
    start = x.rfind("<Button", 0, idx)
    end = x.find("</Button>", idx)
    print(f"{name}:")
    print(x[start:end+9])
    print("--- contains Click events: " + str(("Click=" in x[start:end+9])))
PY

Repository: ChrisTitusTech/winutil

Length of output: 3533


Add handlers for the new ISO chevron buttons in one place.

WPFWin11ISOBackButton and WPFWin11ISOForwardButton are defined as plain Button controls, so the generic per-control loop attaches Invoke-WPFButton $Sender.name. Invoke-WPFButton has no default branch, so those names fall through with no action and can silently ignore clicks. Add these handlers in Invoke-WPFButton.ps1 or move the chevron click handlers before the generic handler is attached.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/main.ps1` around lines 520 - 528, Ensure the WPFWin11ISOBackButton
and WPFWin11ISOForwardButton click behavior is registered before the generic
per-control handler can intercept them: either move their existing Add_Click
handlers ahead of that registration or add explicit cases in Invoke-WPFButton
for both names that select WPFWin11ISOSelectSection and WPFWin11ISOModifySection
respectively.

Comment thread xaml/inputXML.xaml
Comment on lines +1574 to +1584
<Button Name="WPFWin11ISOBackButton"
Grid.Column="0"
Margin="0,0,10,0"
Content="&#xE76B;"
FontFamily="Segoe MDL2 Assets"
FontSize="{DynamicResource Win11StepTitleFontSize}"
Width="44" Height="72"
Background="Transparent"
HorizontalAlignment="Right" VerticalAlignment="Center"
Panel.ZIndex="1"
ToolTip="Back to the previous step">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Chevron buttons use fixed sizes with a scaled glyph font.

FontSize uses Win11StepTitleFontSize. That resource is now scaled by Invoke-WinUtilFontScaling and reaches 44 at the 2.0 scale factor. Width="44" and Height="72" stay fixed, so the glyph clips at large scale factors. Use MinWidth/MinHeight with Padding, or bind the size to the same scaled resource.

♿ Proposed change for both chevron buttons
-                                Width="44" Height="72"
+                                MinWidth="44" MinHeight="72"
+                                Padding="8"

Also applies to: 1596-1606

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@xaml/inputXML.xaml` around lines 1574 - 1584, Update both chevron buttons,
WPFWin11ISOBackButton and the corresponding button near the following block, so
their dimensions scale with Win11StepTitleFontSize instead of remaining fixed at
Width="44" and Height="72". Use MinWidth/MinHeight with appropriate Padding or
bind the width and height to the scaled resource, ensuring the glyph remains
fully visible at large scale factors.

Comment thread xaml/inputXML.xaml
<TextBlock Text="&#xE8A5;" Style="{StaticResource Win11StepIcon}" Margin="22,0,8,0"/>
<TextBlock Style="{StaticResource Win11StepCaption}" Text="Image file"/>
<TextBlock Name="WPFWin11ISOImageFile" Style="{StaticResource Win11StepValue}"/>
<TextBlock Name="WPFWin11ISOArchLabel" Style="{StaticResource Win11StepValue}" Margin="8,0,0,0"/>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find every reference to the Win11 verified-panel labels across the repository.
rg -n -C3 'WPFWin11ISOArchLabel|WPFWin11ISOImageFile|WPFWin11ISOMountDriveLetter' --glob '!winutil.ps1'

Repository: ChrisTitusTech/winutil

Length of output: 160


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== repository root files =="
git ls-files | sed -n '1,120p'

echo "== AGENTS.md exists =="
test -f AGENTS.md && echo yes || echo no
[ -f AGENTS.md ] && sed -n '1,200p' AGENTS.md

echo "== locate relevant files =="
git ls-files | rg '(^|/)AGENTS\.md$|inputXML\.xaml$|Invoke-WinUtilISO\.ps1$|winutil\.ps1$' || true

echo "== broad references without exclusions =="
rg -n -C2 'WPFWin11ISOArchLabel|WPFWin11ISOImageFile|WPFWin11ISOMountDriveLetter|Win11.*ISO|ISOArchLabel|ISOImageFile|MountDriveLetter' . || true

echo "== xaml line context =="
if [ -f xaml/inputXML.xaml ]; then
  sed -n '1888,1930p' xaml/inputXML.xaml
fi

echo "== script assignment context =="
for f in $(rg -l 'Invoke-WinUtilISO|Win11ISO|WPFWin11ISOArchLabel|WPFWin11ISOImageFile|WPFWin11ISOMountDriveLetter' .); do
  echo "--- $f ---"
  rg -n -C5 'WPFWin11ISOArchLabel|WPFWin11ISOImageFile|WPFWin11ISOMountDriveLetter|\.Win11ISO|Win11ISO' "$f" || true
done

Repository: ChrisTitusTech/winutil

Length of output: 50381


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== exact matches for relevant UI controls =="
rg -n --fixed-strings 'WPFWin11ISOArchLabel|WPFWin11ISOImageFile|WPFWin11ISOMountDriveLetter' . || true

echo "== Invoke-WinUtilISO relevant section =="
wc -l functions/private/Invoke-WinUtilISO.ps1
rg -n -C8 'WPFWin11ISOPath|WPFWin11ISOFileInfo|WPFWin11ISOMountDriveLetter|WPFWin11ISOImageFile|Invoke-WinUtilISOCheck|Windows ISO|Architecture|arch|Arch|Editions|ISO' functions/private/Invoke-WinUtilISO.ps1 || true

echo "== source files containing UI element references =="
python3 - <<'PY'
from pathlib import Path
targets = [
    'WPFWin11ISOPath', 'WPFWin11ISOFileInfo',
    'WPFWin11ISOMountDriveLetter', 'WPFWin11ISOImageFile', 'WPFWin11ISOArchLabel',
]
for path in sorted(Path('.').rglob('*')):
    if '.git' in path.parts or path.suffix not in {'.ps1','.psm1','.ps1xml','.xaml','.psd1'}:
        continue
    try:
        text = path.read_text(errors='ignore')
    except Exception:
        continue
    hits = [t for t in targets if t in text]
    if hits:
        print(f'--- {path} ---')
        for hit in hits:
            print(f'{hit}: {text.count(hit)}')
PY

echo "== compiled/generated generated files around labels if present =="
if [ -f winutil.ps1 ]; then
  wc -l winutil.ps1
  rg -n -C3 'WPFWin11ISOArchLabel|Win11ISOImageFile|Win11ISOMountDriveLetter|Win11ISOPath|Windows ISO|Architecture' winutil.ps1 || true
else
  echo "winutil.ps1 not present"
fi

Repository: ChrisTitusTech/winutil

Length of output: 34166


Set WPFWin11ISOArchLabel from ISO image metadata or remove it.

Invoke-WinUtilISO.ps1 populates WPFWin11ISOMountDriveLetter and WPFWin11ISOImageFile, but no source sets WPFWin11ISOArchLabel. Unless this is intentional for a future architecture panel, update the verification UI path with the ISO architecture or remove the unused control.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@xaml/inputXML.xaml` at line 1913, Update the verification UI flow using
WPFWin11ISOArchLabel so it is populated from the ISO image architecture metadata
alongside WPFWin11ISOMountDriveLetter and WPFWin11ISOImageFile; if architecture
is not supported or displayed, remove the unused WPFWin11ISOArchLabel control
and its related references.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new feature New feature or request ui update UI/UX improvements

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants