PowerShell + XAMLで最小GUIを作る ― ButtonのClickイベントを追って理解する

PowerShellカテゴリを表すパンダのイラスト PowerShell

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoft LearnのWPF/XAML資料と既存Daily-Code-Samplesを確認し、見た目を作り込む前にClickイベントがPowerShellへ届く最小GUIとして整理しています。

検証ステータス:📘 公式情報確認済み・Windows実機未確認

PowerShellでもWPF/XAMLを使ってGUIを作れます。ただし最初から業務アプリを作るより、TextBox 1個とButton 1個で「XAMLのボタンを押す → PowerShellのイベントハンドラが動く」を確認する方が仕組みを理解しやすくなります。

今回の成功条件

次の4つが起きればSmoke Test成功です。

  1. ウィンドウが開く

  2. TextBoxへ文字を入力できる

  3. Buttonを押せる

  4. 画面とコンソールへ [SUCCESS] / [RESULT] が出る

WPFとXAMLの役割はMicrosoft Learnで確認できます。

まず動かす

Windows PowerShell 5.1をSTAで起動して試します。

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()

実行時は次のようにSTAを明示するのが分かりやすいです。

powershell.exe -STA

ここを見る

画面を作るのはXAML、Click後の処理を書くのはPowerShellです。FindName() がXAML内の名前付き要素をPowerShell側へ橋渡しし、Add_Click() がButtonのClickイベントへ処理を登録します。

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を更新

GUIが表示されただけでは成功判定にしません。ボタンを押した結果がPowerShell側へ届いて初めて、イベント配線まで確認できたと判断します。

1か所変えてみる

ButtonContent="イベントを送る" だけを別の文字へ変えて再実行します。処理は変わらず、XAMLが画面構造・表示を担当していることを確認できます。

次はTextBlockを1つ増やす、Gridへ変える、色を付ける、と段階的に育てれば、どの変更で問題が起きたか切り分けやすくなります。

なぜSTAが出てくるのか

WPFにはUIスレッドとDispatcherの考え方があります。PowerShellからWPFを扱うときは、スレッドのApartmentStateが関係します。完成版サンプルではSTAでない場合を明示的に失敗扱いにしています。

仕事で使うなら

GUI化する前に、処理本体を関数として単独実行できる状態にしておくと安全です。

  • GUIの見た目と処理ロジックを分ける

  • 空入力を黙って採用しない

  • 長時間処理をUIスレッドで直接回さない

  • 例外を握りつぶして成功表示しない

  • ボタン連打や二重実行を考慮する

最初のSmoke Testが動いてから装飾を足す方が、初心者でも原因を追いやすくなります。

GitHubサンプル

完全版はSTA確認、空入力、[FAILED] 表示まで含みます。

公式情報・一次情報

まとめ

PowerShell + XAMLの最初の目標は豪華な画面ではなく、UIイベントがPowerShellへ届くことを目で確認することです。最小GUIが動いた後なら、機能や見た目を1つずつ安全に積み上げられます。

文書情報

記事タイトル
PowerShell + XAMLで最小GUIを作る ― ButtonのClickイベントを追って理解する
作成日
更新日
Source URL
https://papanda925.com/?p=15335

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました