首页 > 解决方案 > 运行我的脚本时不会加载 XAML WPF 表单

问题描述

大家好,当我尝试使用我的 XAML 文件运行脚本时出现错误。下面的错误。我还附上了我在 Visual Studio 中制作的 WPF 表单中导致错误的代码。当我从表单中删除此代码时,脚本会很好地加载 XAML 文件。我究竟做错了什么?

错误:使用“1”参数调用“加载”的异常:“无法从文本“CheckBox1_Click”创建“点击”。

在 XAML\Script.ps1:30 的路径 char:5

$window = [Windows.Markup.XamlReader]::Load($reader)

CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException

完全限定错误 ID:XamlParseException

#Assembly and Sharepoint Connection Code

Add-Type -AssemblyName PresentationFramework

#Gets user name of the user running the script (Only first and last initial)

$UserName = $env:username.ToCharArray() | Select -First 2

$UserInitials = $UserName -Join ""

#XAML GUI Code

$xamlFile = "Path of XAML file"

#GUI Creation Code

$inputXML = Get-Content $xamlFile -Raw

$inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -replace '^<Win.*', '<Window'

[XML]$XAML = $inputXML

#Read XAML

$reader = (New-Object System.Xml.XmlNodeReader $xaml)


try 
{
    $window = [Windows.Markup.XamlReader]::Load($reader)
} 
catch 
{
    Write-Warning $_.Exception
    throw
}

#Create variables based on form control names

$xaml.SelectNodes("//*[@Name]") | ForEach-Object {

    #"trying item $($_.Name)";

    try 
    {
        Set-Variable -Name "var_$($_.Name)" -Value $window.FindName($_.Name) -ErrorAction Stop
    } 
    catch 
    {
        throw
    }

}

Get-Variable var_*

#Code from the click event in my WPF form

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void CheckBox1_Click(object sender, RoutedEventArgs e)
    {
        if (CheckBox1.IsChecked == true)
        {
            CheckBox2.IsEnabled = false;
            CheckBox2.IsChecked = false;
            CheckBox3.IsEnabled = false;
            CheckBox3.IsChecked = false;
            CheckBox4.IsEnabled = false;
            CheckBox4.IsChecked = false;
            CheckBox5.IsEnabled = false;
            CheckBox5.IsChecked = false;
        }
        else
        {
            CheckBox2.IsEnabled = true;
            CheckBox3.IsEnabled = true;
            CheckBox4.IsEnabled = true;
            CheckBox5.IsEnabled = true;
        }
    }
}

标签: c#wpfpowershellxaml

解决方案


我在我的 PowerShell 脚本中实现所有控制事件处理,而不是在表单代码中使用事件。

如果您像以前一样取出代码并将事件处理程序添加到您的 PS 代码中,如下所示,您应该得到您正在寻找的解决方案。

<ControlVarName>.Add_Click()
{
        if (CheckBox1.IsChecked == true)
        {
            CheckBox2.IsEnabled = false;
            CheckBox2.IsChecked = false;
            CheckBox3.IsEnabled = false;
            CheckBox3.IsChecked = false;
            CheckBox4.IsEnabled = false;
            CheckBox4.IsChecked = false;
            CheckBox5.IsEnabled = false;
            CheckBox5.IsChecked = false;
        }
        else
        {
            CheckBox2.IsEnabled = true;
            CheckBox3.IsEnabled = true;
            CheckBox4.IsEnabled = true;
            CheckBox5.IsEnabled = true;
        }
    }

您将需要更改表单属性名称以反映您在 PS 代码中提供的变量名称。


推荐阅读