Microsoft.Windows.Shell命名空间访问中的TaskbarItemInfo

时间:2019-05-04 00:29:19

标签: wpf powershell xaml userform

我在弄清楚如何将某些XAML部分转码为独立功能时遇到问题。我主要要访问Windows任务栏中的UserForm图标,并设置TaskbarItemInfo.ProgressState,TaskbarItemInfo.ProgressValue,TaskbarItemInfo.Overlay等属性。

我在这里检查了以下实例:

https://blog.netnerds.net/2016/01/adding-toolbar-icons-to-your-powershell-wpf-guis/

(这实际上在PowerShell中有效,但是XAML创建了自己的Window类,使普通的用户窗体过时了...

在MSDN上检查了此.Net参考:

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创建的实际PowerShell创建的用户窗体,

$MyForm = New-Object System.Windows.Forms.Form

目标是我可以使用类似的构造来访问上述功能

$MyForm.TaskbarItemInfo.Overlay = $bitmap
$MyForm.TaskbarItemInfo.Description = $WinTitle
$MyForm.TaskbarItemInfo.ProgressValue = 1.0
$MyForm.TaskbarItemInfo.ProgressState = "Normal"

,结果将是Powershell生成的“表单”图标,该图标实际显示,但具有TaskbarItemInfo功能。

这是可能的还是会要求我拥有使用XAML生成的整个用户表单(但是如何用函数和所有东西访问GUI元素?

使用System.Windows.Forms.Form库制作GUI更加容易,因为它还允许使用Eventhandlers更轻松地定义所有GUI元素。因此,如果可以将XAML部分剥离或转换为某种方式,以便我可以从本机Powershell代码中访问它,那么将是理想的。

0 个答案:

没有答案