2017-09-28 3 views
1

XAML을 사용하여 PowerShell에서 GUI를 작성합니다. 나는 프로그램에서 일어나는 일의 텍스트로 GUI 레이블/텍스트를 업데이트 할 것입니다. 배열의 일치에 대한 검색이 코드 부분을 복용Powershell GUI 레이블 변경

for($i in $array){ 
    if $i -eq "item"{ 
    add item to matcharray 
    } 
} 

예. GUI의 레이블에는 "matches for array"라는 검색 결과가 있습니다. 그런 다음 몇 가지 수학 기능을 수행하는 등 코드의 다른 부분으로 이동합니다. GUI는 "Doing math functions"이라고 말할 것입니다. 지금까지는 버튼 클릭으로 GUI 업데이트를 할 수 있지만 일단 코드 조각이 실행되면 업데이트하고 싶습니다. 최소한 타이머를 업데이트하십시오. 자동으로 라벨 텍스트를 변경하는 방법을 찾고 있습니다. 라벨을 자동으로 변경하는 작은 코드가 도움이됩니다.

답변

0

시도해 보셨습니까?

$Label.Text = "Whatever you want your label to say here" 

필요한 경우 코드에서 원하는대로 실행할 수 있습니다.

+2

의 경우 '$ Label.Content'일 수도 있습니다. – cet51

+0

그래도 문제는 GUI 업데이트와 함께 발생합니다. 텍스트를 설정할 수 있습니다. 그런 다음 텍스트를 변경하는 다른 줄을 넣으면. GUI에는 첫 번째 세트 만 표시되고 두 번째 세트에는 업데이트되지 않습니다. – Shawnzye

+0

텍스트를 업데이트 한 후 다음을 수행하십시오 :'[System.Windows.Forms.Application] :: DoEvents()'그러면 폼이 업데이트되어 텍스트가 변경됩니다. 내가 가진 무엇 – cet51

1

실제로 여기에 약간의 코드가 포함되어있어 매우 간단합니다. https://foxdeploy.com/functions/ise-snippets/xaml-to-gui/

WFP 개체를 Powershell 개체에 바인딩하고 그에 따라 업데이트하는 기능을 사용합니다.

$inputXML = @" 
XAML 
"@  

$inputXML = $inputXML -replace 'mc:Ignorable="d"','' -replace "x:N",'N' -replace '^<Win.*', '<Window' 

[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework') 
[xml]$XAML = $inputXML 

$reader=(New-Object System.Xml.XmlNodeReader $xaml) 
try { 
    $Form=[Windows.Markup.XamlReader]::Load($reader) 
} catch { 
    Write-Host "Unable to load Windows.Markup.XamlReader. Double-check syntax and ensure .net is installed." 
} 

$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name "WPF$($_.Name)" -Value $Form.FindName($_.Name)} 

Function Get-FormVariables 
{ 
    if ($global:ReadmeDisplay -ne $true) { 
     Write-host "If you need to reference this display again, run Get-FormVariables" -ForegroundColor Yellow; $global:ReadmeDisplay=$true 
    } 
    write-host "Found the following interactable elements from our form" -ForegroundColor Cyan 
    get-variable WPF* 
} 

Get-FormVariables 

#Updates the XAML thing named "label1" 
$WPFlabel1.Text = "This is the starting value!" 

$WPFbutton1.Add_Click({ 
$WPFlabel1.Text = "This is the updated value!" 
}) 
$Form.ShowDialog() | out-null 

코드를 Add_Click 안에 넣고 원하는 위치에 업데이트 된 텍스트를 배치하십시오. 타이머 등에서 XAML의 경우

+0

좋은 게시글입니다. Powershell에서 XAML을 사용하는 방법을 배웠던 정확한 스크립트인지 확인하십시오. – cet51

+0

감사합니다. @CoryEtmund, 최근 프로젝트에 대해 직접 배웠습니다. 내 마음에 신선했습니다. 나는 확실히 그 사이트의 자원없이 그것을 할 수 없었다. –

+0

그 사이트는 확실히 유용했습니다. Visual Studio의 WPF 프로젝트에서 첫 번째 XAML 양식을 만들려고했는데 C#에 대한 많은 경험이 없었습니다. 내가 PS와 그것을 할 수 있었던 것을 알았고, 그 순간부터 매우 기뻤다! – cet51