Так что я потратил довольно много времени в поисках подсказки для решения, но в основном ничего не нашел. Я пытаюсь создать графический интерфейс с 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="<- 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	" 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. Если это не работает после копирования и вставки, я мог забыть добавить каждый} после помещения его сюда, пришлось отредактировать его, чтобы немного убрать, чтобы он не выглядел как дурак.