Добавить предложение закрытия окна в диалог WPF - PullRequest
1 голос
/ 18 октября 2019

У меня есть небольшой опыт работы с PowerShell, но не с WPF. Следующий код прекрасно работает в PowerShell и запускает файл jpg в окне:

Param (
    [String]$FilePath = "C:\SplashScreen.jpg"
)

Add-Type -AssemblyName PresentationFramework

[XML]$xaml = @"
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="Window" Title="Initial Window"
        WindowStartupLocation = "CenterScreen"
        WindowStyle = "None"
        ResizeMode = "NoResize"

        SizeToContent = "WidthAndHeight">
        <Image Source="$FilePath" />
        <!-- Button to close on Esc -->
</Window>
"@
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
$window = [Windows.Markup.XamlReader]::Load($reader)
$window.Activate()
$window.ShowDialog()

Единственное, что мне нужно добавить, - это закрытие диалога при нажатии клавиши escape,Следующий код делает именно это:

<Window.CommandBindings>
   <CommandBinding Command="Close" Executed="OnCloseCmdExecuted" />
</Window.CommandBindings>

<Window.InputBindings>
   <KeyBinding Command="Close" Key="Escape" />
</Window.InputBindings>

    private void OnCloseCmdExecuted(object sender, ExecutedRoutedEventArgs e)
{
   this.Close();
}

Или вот этот:

public MainWindow()
{
    InitializeComponent();

    this.PreviewKeyDown += new KeyEventHandler(HandleEsc);
}    
private void HandleEsc(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Escape)
        Close();
}

Куда бы я ни поместил код в XML, он никогда не работает и выдает ошибку. Как это можно добавить?

1 Ответ

1 голос
/ 18 октября 2019

Это был забавный вызов: -)

Попробуйте:

Param (
    [String]$FilePath = "C:\temp\Export\mypic.png"
)

Add-Type -AssemblyName PresentationFramework

[XML]$xaml = @"
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="Window" Title="Initial Window"
        WindowStartupLocation = "CenterScreen"
        WindowStyle = "None"
        ResizeMode = "NoResize"

        SizeToContent = "WidthAndHeight">
        <Image Source="$FilePath" />
        <!-- Button to close on Esc -->
</Window>
"@
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
$window = [Windows.Markup.XamlReader]::Load($reader)
$code = {
    [System.Windows.Input.KeyEventArgs]$e = $args[1]
    if ($e.Key -eq 'ESC')
    {
        $window.Close()
    }
}
$null = $window.add_KeyUp($code)
$window.Activate()
$window.ShowDialog()

Я нашел идею здесь https://www.reddit.com/r/sysadmin/comments/1u3c98/powershell_winform_on_close_event_handler_example/

и

https://books.google.ch/books?id=Noh4DwAAQBAJ&pg=PT1183&lpg=PT1183&dq=powershell+add_keyup&source=bl&ots=2Q42772co0&sig=ACfU3U2diUwUvvmbWoou003XNaOBLjLzQQ&hl=de&sa=X&ved=2ahUKEwiTqOLx3KXlAhUECewKHfR3AT0Q6AEwAnoECAkQAQ#v=onepage&q=powershell%20add_keyup&f=false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...