簡體   English   中英

如何使 Powershell WPF 表單在加載(並顯示自身)時運行函數?

[英]How do I make a Powershell WPF form run a function when loaded (and display itself)?

我在 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
})

該腳本以尚未可見的表單運行,然后將計數器顯示為零。

如何設置它以便顯示表單,然后觸發該功能以自動開始倒計時?

當整個窗口准備就緒時,會觸發 Loaded 事件。 渲染前的最后一站。

這對你的Countdown有點太早了。

使用 ContentRendered 事件。

$Window.Add_ContentRendered({    
    Countdown   
})

這是一個很好的參考WPF 應用程序的生命周期事件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM