c# - 运行我的脚本时不会加载 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;
}
}
}
解决方案
我在我的 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 代码中提供的变量名称。
推荐阅读
- javascript - Safari 上可定制的内置元素——通过脚本标签与 ES6 导入进行 polyfill
- windows - Echo 命令在 Windows 的 git bash 上的 shell 脚本中不起作用
- google-sheets - 在 Google 表格中预测一个月的数据
- vue.js - 如何在 Vue.js 项目中为 Froala 集成 MathType
- mysql - SQL 查询简化
- react-native - Expo 错误 - 您的项目的 SDK 版本 >= 33.0.0,但 expo 包版本似乎较旧
- javascript - 无法使用 html 表中的主复选框全选/取消全选
- dynamics-crm - d365 退出自动编号
- javascript - 通过 JQuery OnClick CSS 显示更改查看时无法在 IFRAME 中加载 Google Doc
- windows - 具有多个路径的自定义 URI 协议