Wpf 无法在powershell中加载XAML

Wpf 无法在powershell中加载XAML,wpf,xaml,powershell,Wpf,Xaml,Powershell,我有一个加载xaml布局的非常基本的powershell脚本。它将抛出以下错误: 使用“1”参数调用“Load”时发生异常: “无法创建中定义的“窗口”的实例 程序集的PresentationFramework,版本=3.0.0.0, 区域性=中性,PublicKeyToken=31bf3856ad364e35'. 调用线程必须是STA,因为许多UI组件都需要它。“ 我已经检查了脚本和xaml文件好几次了,但是我没有看到问题出在哪里,而且我也没有完全理解我得到的错误意味着什么,这也没有帮助。任何

我有一个加载xaml布局的非常基本的powershell脚本。它将抛出以下错误:

使用“1”参数调用“Load”时发生异常:
“无法创建中定义的“窗口”的实例
程序集的PresentationFramework,版本=3.0.0.0,
区域性=中性,PublicKeyToken=31bf3856ad364e35'.
调用线程必须是STA,因为许多UI组件都需要它。“

我已经检查了脚本和xaml文件好几次了,但是我没有看到问题出在哪里,而且我也没有完全理解我得到的错误意味着什么,这也没有帮助。任何帮助都将不胜感激。多谢各位

Powershell脚本:

Add-Type -AssemblyName presentationframework
$xaml = [xml](Get-Content MainWindow.xaml)
$reader = New-Object System.Xml.XmlNodeReader $xaml
$form = [Windows.Markup.XamlReader]::Load($reader)
$button = $form.FindName('testButton')
$button.Add_Click({
    $s = $form.FindName('testBox').Text;
    $form.FindName('testLabel').Content = $s;
})
$form.ShowDialog()
Xaml文件:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="Window"
    Title="MainWindow"
    Width="640" Height="480">

    <Grid x:Name="LayoutRoot">
        <TextBox x:Name="testBox" HorizontalAlignment="Left"
                 Margin="26.782,48.626,0,0" TextWrapping="Wrap"
                 Text="New label text" VerticalAlignment="Top" Width="130.22"/>
        <Label x:Name="testLabel" Content="User Search" HorizontalAlignment="Left"
                 Margin="20.666,22.666,0,0" VerticalAlignment="Top"/>
        <Button x:Name="testButton" Content="Change It!" HorizontalAlignment="Left"
                 Margin="26.782,85,0,0" VerticalAlignment="Top" Width="75"/>
    </Grid>
</Window>

这意味着您的main()必须用[STAThread]注释,我不确定它在powershell中是否可行。
有关STA与MTA的更多信息,请参阅。

@BrandonRisell,查看PowerShell模块以帮助在脚本中构建WPF用户界面


ShowUI使WPF的复杂世界易于在PowerShell中使用。您可以使用ShowUI编写简单的WPF小工具、脚本、组件和完整应用程序的快速前端

这个错误就是我所说的“因为我说过这样的错误”,它的意思正是它所说的

无法在Powershell.exe中加载XAML,因为它是STA。“许多”组件都需要这样做。我的很多,我是指WPF

幸运的是,每个PowerShell主机都支持STA

  • powershell.exe-sta(打开sta模式)
  • Powershell集成脚本环境(默认情况下为STA)
  • PowerGUI(默认情况下为STA)
  • PowerShellPlus(启动时按住shift键打开STA)
  • PrimalScript(位于顶部栏的复选框中)
  • PowerSE/PowerWF(STA即将推出)
不过,在PowerShell中编写UI的方法要简单得多。你应该退房


希望这有帮助,

PowerShell-Sta
启动PowerShell谢谢你的帖子链接,我没有意识到线程之间的区别@Joey你知道其他更优雅的解决方案吗?BrandonRisell:如果你认为答案有用,而不是评论谢谢,请投赞成票。这就是这里的工作方式。@Joey:我认为这不应该是一个评论,而应该是一个公认的答案。这更多的是对你的回答,我不确定在PowerShell中是否可能。对于一个可能被接受的正确答案,这可能更好。