Создание графического интерфейса PowerShell (часть 3)

Опубликовано: 18 Марта, 2023

  • Создание графического интерфейса PowerShell (часть 13)

В предыдущей статье этой серии я показал вам технику создания очень примитивного графического интерфейса для PowerShell. В этой статье я хочу развить то, что уже показывал вам, вводя некоторые новые приемы.

Прежде чем я прыгну и начну изменять код, я хочу быстро просмотреть, как обстоят дела. В предыдущей статье я создал три файла. Первый из этих файлов называется C:ScriptsLoadDialog.ps1. Это файл, который выполняет всю тяжелую работу и преобразует наш код в графический формат. Нам не нужно будет изменять этот код, поскольку мы модифицируем наш графический интерфейс. Код, используемый в LoadDialog.ps1:

[Привязка командлета()]

Парам(

[Параметр(Обязательный=$Истина,Позиция=1)]

[строка]$XamlPath

)

[xml]$Global:xmlWPF = Get-Content-Path $XamlPath

#Добавление сборок WPF и Windows Forms

пытаться{

Add-Type -AssemblyName PresentationCore, PresentationFramework, WindowsBase, system.windows.forms

} ловить {

Выбросить «Не удалось загрузить сборки Windows Presentation Framework».

}

#Создать средство чтения XAML с помощью нового средства чтения узлов XML

$Global:xamGUI = [Windows.Markup.XamlReader]::Load((новый объект System.Xml.XmlNodeReader $xmlWPF))

#Создать хуки для каждого именованного объекта в XAML

$xmlWPF.SelectNodes("//*[@Name]") | %{

Set-Variable -Name ($_.Name) -Value $xamGUI.FindName($_.Name) -Scope Global

}

Второй созданный нами файл — C:FormsMyForm.xaml. Это файл, который форматирует интерфейс GUI. В данном случае файл использовался для создания окна, текстовой метки и кнопки. Используемый код:

<Окно

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Заголовок=”MainWindow” Высота=”350″ Ширина=”525″>

<Сетка>

<Имя кнопки = «Моя кнопка» Содержимое = «Кнопка» HorizontalAlignment = «Левое» Поле = «249,132,0,0» VerticalAlignment = «Верх» Ширина = «75»/>

<Label Name="MyLabel" Content="Label" HorizontalAlignment="Left" Margin="88,73,0,0″ VerticalAlignment="Top"/>

</сетка>

</окно>

Третий файл, который мы создали в предыдущей статье, был C:ScriptsHelloWorld.ps1. В нынешнем виде этот файл мало что делает. Он вызывает сценарий LoadDialog.ps1, который, как вы помните, обрабатывает графику. Файл также определяет, что должно произойти при нажатии кнопки, и загружает файл MyForm.XAML, который отображает интерфейс GUI. Если бы мы создавали реальный сценарий PowerShell, сценарий HelloWorld.ps1 (или как бы вы его ни называли) содержал бы всю логику, а MyForm.xaml инструктирует PowerShell о том, как форматировать вывод.

Итак, теперь, когда я потратил некоторое время на просмотр ранее написанного кода и общей используемой структуры, пришло время немного повеселиться. Я хочу начать с того, что покажу вам, как добавить всплеск цвета. На данный момент созданный графический интерфейс функционален, но выглядит почти так же скучно, как и текстовый интерфейс.

Как вы помните из предыдущей статьи, я использовал Visual Studio для создания макета интерфейса GUI. Мы можем использовать Visual Studio для добавления дополнительных визуальных элементов и цвета. Однако действительно хорошая вещь в Visual Studio заключается в том, что вы можете использовать ее, чтобы понять, как выполнить задачу, а затем вы можете уйти и написать свой собственный код на основе того, что вы узнали в среде Visual Studio. Позвольте мне показать вам, что я имею в виду.

Если вы посмотрите на рисунок A, вы увидите снимок экрана, который чем-то похож на тот, который я использовал в прошлой статье. Чтобы получить этот снимок экрана, я открыл Visual Studio, запустил новый проект WPF, открыл панель инструментов и перетащил кнопку в главное окно. Я вообще не писал никакого кода, и тем не менее Visual Studio автоматически создала блок кода (показан внизу экрана. В прошлой статье мы внесли небольшие изменения в код и использовали его в качестве основы для MyForm). XAML-файл.

Изображение 4654
Рисунок A: Visual Studio позволяет использовать метод перетаскивания для создания пользовательского интерфейса.

Чего я не показал вам в прошлой статье, так это того, что Visual Studio позволяет делать больше, чем просто перетаскивать элементы интерфейса в окно. Вы можете добавить атрибуты к этим элементам. Например, вы можете изменить размер, границу, цвет текста и цвет фона кнопки.

Вы можете сделать такие модификации, просто написав код. Любой новый код, который вы пишете, будет отображаться в главном окне. Однако, если вам не совсем удобно писать код XAML с нуля, вы можете сделать то, что я люблю называть «заполнить пустое программирование».

Когда вы выбираете кнопку в главном окне, правая нижняя панель интерфейса позволяет добавлять атрибуты к кнопке. Например, вы могли заметить, что на предыдущем рисунке можно добавить всплывающую подсказку или изменить внешний вид курсора. Но как насчет цвета? Если вы развернете раздел «Кисть», у вас будет возможность определить цвет фона кнопки, текста, границы и т. д. Некоторые из этих параметров показаны на рисунке B.

Изображение 4655
Рисунок B: Вы можете определить цвет кнопки.

Если вы посмотрите, например, на рисунок C, то увидите, что я создал синюю кнопку с белым текстом и черной рамкой. Однако, что более важно, эти действия привели к обновлению блока кода с учетом моих изменений, как показано на рис. D. Я мог бы использовать этот код как есть или применить модификации кода Visual Studio к собственному XAML-файлу.

Изображение 4656
Рисунок C. Я изменил внешний вид кнопки, добавив цвет.

Изображение 4657
Рисунок D: Visual Studio обновила код, чтобы он соответствовал моим изменениям.

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

Задать атрибуты окна так же просто, как задать атрибуты кнопки. Хитрость заключается в том, чтобы выбрать окно, а не кнопку. После этого вы можете применять атрибуты к окну точно так же, как вы применяете атрибуты к кнопке. Код снова обновляется, чтобы отразить ваши изменения. Если вы посмотрите, например, на рисунок E, то увидите, что я изменил цвет окна, а Visual Studio добавила тег с именем Grid Background, который определяет цвет фона окна.

Изображение 4658
Рисунок E: Я изменил цвет фона окна.

Что, если бы я захотел применить эти изменения к файлу MyForms.XAML, о котором я говорил в начале этой статьи? Что ж, это достаточно легко сделать. Все, что мне нужно сделать, это скопировать атрибуты, которые Visual Studio добавила в пример кода, а затем применить эти атрибуты к файлу MyForms.XAML. Вы можете увидеть измененный код ниже. Если вам непонятны модификации, вы можете сравнить этот код с кодом, который я указал в начале статьи.

<Окно

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Заголовок=”MainWindow” Высота=”350″ Ширина=”525″>

<Фоновая сетка = ”#FFB7C9C4″>

<Имя кнопки=”Моя кнопка” Содержание=”Кнопка” HorizontalAlignment=”Левое” Поле=”249,132,0,0″ Вертикальное выравнивание=”Верх” Ширина=”75″ Фон=”#FF057DF5″ Передний план=”#FFFDF9F9″ BorderBrush= ”#FF171717″/>

<Label Name="MyLabel" Content="Label" HorizontalAlignment="Left" Margin="88,73,0,0″ VerticalAlignment="Top"/>

</сетка>

</окно>

Вы можете увидеть модифицированный вывод сценария Hello World на рисунке F.

Изображение 4659
Рисунок F: Это цветная версия сценария Hello World.

Вывод

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