我目前正在做一个项目,要求我将进度条放在状态栏的一个面板中。是否有人对此有任何经验,或者任何人都可以提供有关其完成方式的意见或指示。我一直在寻找2天没有运气的解决方案。仍然没有足够的Powershell帮助,尤其是在Windows窗体方面。

最佳答案

使用WPK中的PowerShell数据源相对简单。

您可以将WPK作为PowerShellPack的一部分。

这是一个用WPK编写的相当不错的进度查看器:

New-Grid -Columns 2 {
    New-TextBlock -Margin 10 -TextWrapping Wrap -ZIndex 1 -HorizontalAlignment Left -FontWeight Bold -FontSize 12 -DataBinding @{
        "Text" = "LastProgress.Activity"
    }
    New-TextBlock -Margin 10 -ZIndex 1 -TextWrapping Wrap -Column 1 -VerticalAlignment Bottom -HorizontalAlignment Right -FontStyle Italic -FontSize 12 -DataBinding @{
        "Text" = "LastProgress.StatusDescription"
    }
    New-ProgressBar -ColumnSpan 2 -MinHeight 250 -Name ProgressPercent -DataBinding @{
        "Value" = "LastProgress.PercentComplete"
    }
} -DataContext {
    Get-PowerShellDataSource -Script {
        foreach ($n in 1..100) {
            Write-Progress "MajorProgress" "MinorProgress" -PercentComplete $n
            Start-Sleep -Milliseconds 250
        }
    }
} -AsJob

PowerShellDataSource返回一个对象,其中包含给定流的所有输出的列表以及给定流上输出的最后一项(即Progress和LastProgress)。为了显示进度条,我们需要绑定(bind)到LastProgress属性。

代码的前半部分声明进度条。通过使用-DataBinding参数,TextBlocks和Progress栏将自动同步到数据上下文。数据上下文可以在此级别声明(如示例所示),也可以位于父控件中。

此示例中的DataContext是一个简单的PowerShell脚本,该脚本使用Write-Progress每隔一秒钟输出一次测试消息,但是您可以使用任何想要的脚本。

希望这可以帮助。

10-05 20:48
查看更多