Не удается получить содержимое объекта текстового поля в Powershell - PullRequest
0 голосов
/ 08 октября 2019

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

if($WPFtextBox.Key -eq 'Enter')
{  

$Whyisntitworking = $WPFtextBox.Text
$WPFTextBlock.Text = $Whyisntitworking
    }

Как я уже сказал, я просто пытаюсь понять, так что на самом деле ничего не делает. Если весь код нужен или может помочь, просто скажите мне. Я знаю, что KeyDown-Event работает, и все, я просто не могу вывести текст из текстового поля, когда курсор находится внутри него и нажимает ввод.

Редактировать:

    $inputXML = @"
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="Eingabefenster" Height="350" Width="525">
    <Grid>
        <Image x:Name="image" HorizontalAlignment="Left" Height="122" Margin="15,15,0,0" VerticalAlignment="Top" Width="160" Source="C:\Users\hoesl\Pictures\Saved Pictures\Kawkaw.jpg"/>
        <TextBlock x:Name="textBlock" HorizontalAlignment="Left" Height="90" Margin="207,15,0,0" TextWrapping="Wrap" Text="&lt;- This is judgemental parrot. He's judging you!" VerticalAlignment="Top" Width="280" Background="Black" Foreground="White" FontFamily="Segoe WP Black"/>
        <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="14" Margin="367,123,0,0" TextWrapping="Wrap" Text="Type here..." VerticalAlignment="Top" Width="120" FontSize="9.333" Foreground="#FF9C9C9C"/>
        <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="16" Margin="367,170,0,0" TextWrapping="Wrap" Text="Type here..." VerticalAlignment="Top" Width="120" FontSize="9.333" Foreground="#FF9C9C9C"/>
        <TextBlock x:Name="textBlock1" HorizontalAlignment="Left" Margin="207,123,0,0" TextWrapping="Wrap" Text="Attribute&#x9;" VerticalAlignment="Top" Height="23" Width="72"/>
        <TextBlock x:Name="textBlock2" HorizontalAlignment="Left" Margin="207,170,0,0" TextWrapping="Wrap" Text="Identity" VerticalAlignment="Top" Height="23" Width="72"/>
        <Button x:Name="button" Content="Confirm" HorizontalAlignment="Left" Margin="367,220,0,0" VerticalAlignment="Top" Width="120" BorderBrush="#FF787878" Background="#FFE4E4E4"/>

    </Grid>
</Window>

"@ 

$inputXML = $inputXML -replace 'mc:Ignorable="d"','' -replace "x:N",'N' -replace '^<Win.*', '<Window'
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = $inputXML
#Read XAML

$reader=(New-Object System.Xml.XmlNodeReader $xaml)
try{
    $Form=[Windows.Markup.XamlReader]::Load( $reader )
}
catch{
    Write-Warning "Unable to parse XML, with error: $($Error[0])`n Ensure that there are NO SelectionChanged or TextChanged properties in your textboxes (PowerShell cannot process them)"
    throw
}

#===========================================================================
# Load XAML Objects In PowerShell
#===========================================================================

$xaml.SelectNodes("//*[@Name]") | %{"trying item $($_.Name)";
    try {Set-Variable -Name "WPF$($_.Name)" -Value $Form.FindName($_.Name) -ErrorAction Stop}
    catch{throw}
    }

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

#===========================================================================
# Use this space to add code to the various form elements in your GUI
#===========================================================================
$WPFbutton.Add_Click(
{
    If(($WPFtextBox.Text -eq 'a')){
        $WPFtextBox1.Text = $env:COMPUTERNAME
        $WPFTextBlock.Text = "Test Success!"
    } Else {
        $WPFtextBox1.Text = "Congratulations, you didn't break it"
    }

}) 




$WPFtextBox.Add_KeyDown{ 
param
(
  [Parameter(Mandatory)][Object]$sender,
  [Parameter(Mandatory)][Windows.Input.KeyEventArgs]$WPFtextBox
)



if($WPFtextBox.Key -eq 'a')
{
    $WPFtextBox1.Text = ""
    }


if($WPFtextBox.Key -eq 'Enter')
    {  

    $Whyisntitworking = $WPFtextBox.Text
    $WPFTextBlock.Text = $Whyisntitworking

$WPFTextBlock.Text = "At least the key recognition is working"
    }



}









$Form.ShowDialog()

Опять же, речь идет о последнем предложении if. Если это не работает после копирования и вставки, я мог забыть добавить каждый} после помещения его сюда, пришлось отредактировать его, чтобы немного убрать, чтобы он не выглядел как дурак.

...