TaskbarItemInfo в Microsoft.Windows.Shell доступ к пространству имен - PullRequest
0 голосов
/ 04 мая 2019

У меня проблемы с выяснением того, как перекодировать некоторую часть 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, было бы желательно.

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