私はWPFフォームを使用しているPowershellにログインスクリプトを持っています。私はそれがフォームをロードして、スクリプトの進捗状況でフォームを更新したい。Powershell WPFフォームをロードして(そしてそれ自身を表示する)関数を実行させるにはどうすればよいですか?
私が使用しています:
$Window.Add_Loaded({
DoStuff
})
をしかし、何が起こっていることはスクリプトが実行されることで、完成したとき、それは、フォームをロードします。
つまり、私は、スクリプト機能をトリガするために、フォーム上のフォーム負荷をボタンを配置して、期待通りに更新された場合は、次のように本の簡略化した例はある
$Button.Add_Click({
DoStuff
})
:
Add-Type -AssemblyName presentationframework
[xml]$xaml = @"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Window" Title="Countdown" WindowStartupLocation="CenterScreen" WindowStyle="None" Background="#2C2A6F" ResizeMode="NoResize" Width="100" Height="140">
<StackPanel>
<Label Content="3" x:Name="Counter" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontWeight="Bold" FontSize="90" Padding="0,0,0,0" />
<Button Content="Go" x:Name="Button" />
</StackPanel>
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load($reader)
$Counter = $Window.FindName("Counter")
$Button = $Window.FindName("Button")
$Button.Add_Click({
Countdown
})
$Window.Add_Loaded({
})
Function Countdown(){
for($i=3; $i-ge 0; $i--) {
$Counter.Content = $i
$Window.Dispatcher.Invoke([Action]{},[Windows.Threading.DispatcherPriority]::ContextIdle);
Start-sleep -Seconds 1
}
}
$Window.ShowDialog()
これはフォームの読み込みで動作し、ボタンをクリックするとゼロにカウントされます。ただし、私はそれを変更する場合:
$Window.Add_Loaded({
Countdown
})
このスクリプトはまだ表示されていない形式で実行され、ゼロでカウンタを表示します。
フォームを表示するように設定すると、自動的にカウントダウンを開始する機能が起動されます。
パーフェクト良いリファレンスです!どうもありがとう。リンクありがとう - ウェブ上でこれを見つけるのに苦労しました。 – Ben