About This Article
This article was generated using an AI-assisted automation workflow. It reviews Microsoft Learn documentation on WPF and XAML alongside existing Daily-Code-Samples, focusing on creating a minimal GUI where click events reach PowerShell before implementing advanced styling.
Verification Status: Verified with official documentation, Windows physical device not tested
You can create GUIs in PowerShell using WPF and XAML. However, rather than building a business application from scratch, starting with a single TextBox and a single Button to verify that pressing a XAML button triggers a PowerShell event handler makes the underlying mechanism much easier to understand.
Success Criteria for This Exercise
The smoke test is successful if the following four conditions are met:
The window opens.
Text can be entered into the TextBox.
The button can be clicked.
Output appears on both the screen and the console.
[SUCCESS]/[RESULT]
The roles of WPF and XAML can be verified on Microsoft Learn.
Running the Code First
Test the code by launching Windows PowerShell 5.1 in STA mode.
Add-Type -AssemblyName PresentationFramework
[xml]$xaml = @'
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="papanda Smoke Test" Width="380" Height="180">
<StackPanel Margin="20">
<TextBox Name="InputText" Margin="0,0,0,10" />
<Button Name="RunButton" Content="イベントを送る" />
<TextBlock Name="ResultText" Margin="0,12,0,0" />
</StackPanel>
</Window>
'@
$reader = [System.Xml.XmlNodeReader]::new($xaml)
$window = [Windows.Markup.XamlReader]::Load($reader)
$input = $window.FindName('InputText')
$button = $window.FindName('RunButton')
$result = $window.FindName('ResultText')
$button.Add_Click({
$result.Text = "[SUCCESS] PowerShellで受信: $($input.Text)"
Write-Host "[RESULT] Text = $($input.Text)"
})
[void]$window.ShowDialog()
It is recommended to explicitly specify STA during execution as follows.
powershell.exe -STA
Key Takeaways
XAML builds the interface, while PowerShell handles the logic executed after a click.FindName()bridges named elements within the XAML to the PowerShell side, andAdd_Click()registers the handler for the button's Click event.
sequenceDiagram
participant U as User
participant X as XAML Button
participant W as WPF event loop
participant P as PowerShell handler
U->>X: Click
X->>W: Click event
W->>P: Add_Click handler
P-->>X: ResultTextを更新
Simply displaying the GUI is not sufficient to declare success. It is only when the result of clicking the button reaches the PowerShell side that event wiring is confirmed.
Making a Single Change
ButtonChange only the Content="イベントを送る" in
Next, adding a TextBlock, switching to a Grid, or applying styling step by step makes it easier to isolate which change caused an issue if a problem arises.
Why STA is Required
WPF relies on the concepts of UI threads and Dispatchers. When working with WPF from PowerShell, the apartment state of the thread is crucial. The complete sample explicitly treats non-STA environments as errors.
Best Practices for Production Use
Before adding a GUI, ensure that the core processing logic can be executed independently as a function.
Separate GUI presentation from processing logic.
Do not silently accept empty inputs.
Do not run long-running operations directly on the UI thread.
Do not suppress exceptions and report success.
Account for rapid button clicking and double execution.
Getting the initial smoke test running before adding styling makes it easier for beginners to troubleshoot issues.
GitHub Sample
The complete version includes STA verification, empty input handling, and[FAILED] display.
Official and Primary Sources
Conclusion
The primary goal when using PowerShell and XAML is not to create an elaborate UI, but to visually confirm that UI events successfully reach PowerShell. Once the minimal GUI is working, features and styling can be safely built up one by one.

