Вставьте индикатор в панель состояния, используя PowerShell и формы Windows. - PullRequest
2 голосов
/ 24 декабря 2009

В настоящее время я работаю над проектом, который требует, чтобы я поместил индикатор выполнения в одну из панелей строки состояния. Кто-нибудь имеет какой-либо опыт с этим, или может кто-нибудь предоставить какой-либо вклад или направление о том, как это делается. Я уже 2 дня ищу решение без удачи. Там все еще нет достаточного количества помощи PowerShell, особенно когда дело касается оконных форм.

1 Ответ

4 голосов
/ 29 декабря 2009

Это относительно просто сделать с источниками данных PowerShell в WPK.

Вы можете получить 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). Чтобы отобразить индикатор выполнения, нам нужно привязать свойство LastProgress.

Первая половина кода объявляет индикатор выполнения. При использовании параметра -DataBinding панели TextBlocks и Progress автоматически синхронизируются с контекстом данных. Контекст данных может быть объявлен на этом уровне (как показано в примере) или может находиться в родительском элементе управления.

DataContext в этом примере представляет собой простой сценарий PowerShell, который использует Write-Progress для вывода тестового сообщения каждую четверть секунды, но вы можете использовать любой сценарий, который вам нравится.

Надеюсь, это поможет.

...