У меня проблемы с выяснением того, как перекодировать некоторую часть XAML как отдельную функцию.Я хочу в первую очередь получить доступ к значку пользовательской формы на панели задач Windows и установить свойства, такие как TaskbarItemInfo.ProgressState, TaskbarItemInfo.ProgressValue, TaskbarItemInfo.Overlay и т. Д.
Я проверил следующие примеры здесь:
https://blog.netnerds.net/2016/01/adding-toolbar-icons-to-your-powershell-wpf-guis/
(на самом деле это работает в PowerShell, однако XAML создает собственный класс Window, что делает обычную пользовательскую форму устаревшей ...
Проверено .Net-Reference на MSDN:
https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/ff703279%28v%3dvs.100%29
но не могу понять, как я могу интегрировать сборку для загрузки, чтобы я мог получить доступ к функциям и свойствам в ней, используя собственный код Powershell.
# Add required assemblies
Add-Type -AssemblyName PresentationFramework, System.Drawing, System.Windows.Forms, WindowsFormsIntegration
# Setup the XAML
[xml]$script:xaml = '<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="Acadiana (Cajun) Flag" Height="240" Width="320" Background="Gray">
<Window.TaskbarItemInfo>
<TaskbarItemInfo/>
</Window.TaskbarItemInfo>
<Grid>
<Image Name="image" Height="64" Width="64"/>
</Grid>
</Window>'
# Create the form and set variables
$script:window = [Windows.Markup.XamlReader]::Load((New-Object System.Xml.XmlNodeReader $xaml))
$xaml.SelectNodes("//*[@Name]") | ForEach-Object { Set-Variable -Name ($_.Name) -Value $window.FindName($_.Name) -Scope Script }
позжедоступ к нему можно получить с помощью следующего кода:
# This is the toolbar icon and description
$window.TaskbarItemInfo.Overlay = $bitmap
$window.TaskbarItemInfo.Description = $window.Title
$window.TaskbarItemInfo.ProgressValue = 0.8
$window.TaskbarItemInfo.ProgressState = "Normal"
Есть ли способ вырезать XAML таким образом, чтобы он не нуждался в части Window и чтобы часть Window.TaskbarItemInfo можно было привязать кфактическая пользовательская форма, созданная PowerShell, которая создается
$MyForm = New-Object System.Windows.Forms.Form
Цель состоит в том, чтобы я мог получить доступ к вышеуказанным функциям, используя некоторые constrнапример,
$MyForm.TaskbarItemInfo.Overlay = $bitmap
$MyForm.TaskbarItemInfo.Description = $WinTitle
$MyForm.TaskbarItemInfo.ProgressValue = 1.0
$MyForm.TaskbarItemInfo.ProgressState = "Normal"
, и в результате будет создан значок формы, сгенерированный Powershell, который фактически отображается, но обогащен функциональностью TaskbarItemInfo.
Возможно ли это, или потребуетсявся пользовательская форма, сгенерированная с использованием XAML (но как тогда получить доступ к элементам GUI с помощью функций и всего такого?
Проще сделать GUI с использованием библиотеки System.Windows.Forms.Form, поскольку это также позволяетопределить все элементы GUI с помощью Eventhandlers.Поэтому, если часть XAML может быть сокращена или преобразована таким образом, чтобы я мог получить к ней доступ из собственного кода Powershell, было бы желательно.