gpt4 book ai didi

wpf - 了解Powershell全局变量的用例

转载 作者:行者123 更新时间:2023-12-03 00:10:29 27 4
gpt4 key购买 nike

最近,我一直在一个项目中尝试为Powershell脚本创建GUI。即使似乎存在很多可能性,我还是找到了由Microsoft PFE设计的一种实现方法:Chris Conte。

如果您有兴趣,可以找到文章here

现在,我的问题特别涉及到loadDialog.ps1脚本,该脚本基本上是XAML表单和原始Powershell脚本之间的链接。这是代码:

[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,Position=1)]
[string]$XamlPath
)

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

#Add WPF and Windows Forms assemblies
try{
Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase,system.windows.forms
} catch {
Throw "Failed to load Windows Presentation Framework assemblies."
}

#Create the XAML reader using a new XML node reader
$Global:xamGUI = [Windows.Markup.XamlReader]::Load((new-object System.Xml.XmlNodeReader $xmlWPF))

#Create hooks to each named object in the XAML
$xmlWPF.SelectNodes("//*[@Name]") | %{
Set-Variable -Name ($_.Name) -Value $xamGUI.FindName($_.Name) -Scope Global
}

由于 $xamGUI和XAML阅读器捕获的新创建的变量在脚本之间共享,因此我可以理解它们的全局范围。我的问题特定于此行:

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



他为什么要使用全局范围?这是否是为了防止我们想在其他地方使用它,或者我缺少某些东西?我仍然对Powershell环境还不陌生,该片段的作者显然在Powershell Realm 中是臭名昭著的,所以我猜测此声明是有原因的,但我不知道这是什么。

最佳答案

辅助脚本本质上是将变量(XML,表单和所有控件)“返回”给用户。例如,如果XAML中有一个标记为button1的按钮,则脚本将创建一个全局变量$global:button1。然后,您可以使用此变量来附加事件处理程序:
$button1.add_Click{ $Label1.Content = "Hello World" }
在事件处理程序中,对这些全局变量的需求变得显而易见。您必须以某种方式将表单控件传递给事件处理程序scriptblock-在这种情况下为Label1。最简单的方法是在父级(例如全局)范围内创建变量,并允许动态范围界定为您完成工作。 C#通过使封闭类的所有控件成为成员,使用了类似的方法(但在词法范围内)。

关于wpf - 了解Powershell全局变量的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50161752/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com