C# WPF:Load XAML文件,其中包含x:Code元素
我需要加载,并使用XAML文件 我已经编写了简单的XAML文件:C# WPF:Load XAML文件,其中包含x:Code元素,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我需要加载,并使用XAML文件 我已经编写了简单的XAML文件: <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-com
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="150" d:DesignWidth="300" Title="My Window">
<x:Code>
<![CDATA[
void btnMyButton_Click_1(object sender, RoutedEventArgs e) {
MessageBox.Show("Hello world", "Message", MessageBoxButton.OK, MessageBoxImage.Information);
}
]]>
</x:Code>
<Grid>
<Button x:Name="btnMyButton" x:FieldModifier="public" Margin="10" Padding="10"
FontSize="20" Click="btnMyButton_Click_1">My button</Button>
</Grid>
</Window>
但我有一个例外:
发生System.Windows.Markup.XamlParseException:'未能创建
'未能从文本'btnMyButton_Click_1'行创建'Click'
编号“16”和行位置“31”
我发现这样的信息:
在x:Code for WPF中声明的代码有几个值得注意的限制:
...
必须在父根元素上提供x:Class指令。
但是如果我在窗口中添加x:Class
属性:
x:Class="Lisp_Wpf.MainWindow"
然后我得到一个例外:
'指定的类名'Lisp_Wpf.MainWindow'与实际根实例类型不匹配
“System.Windows.Window”。删除Class指令或通过提供实例
XamlObjectWriterSettings.RootObjectInstance。'行号'1'和行位置'14'
在我的MS Visual Studio项目中,XML文件具有以下属性:
构建操作=无;
复制到输出目录=始终复制;
自定义工具=(空字符串)
我已删除此XAML的部分CS文件。如果您想在运行时加载XAML,您不能提供XAML文件背后的任何代码。您可能只需为按钮添加常规事件,并在运行时识别控件-只需查看下面的链接并尝试一下
一般提示(我没有重现您的具体问题):
在WPF中,如果Visual Studio中的生成操作设置为“资源”(您可以在xaml文件的属性下找到该设置),也会出现此错误将构建操作设置为“页面”,它将编译谢谢您的链接。从documentation:>放置在x:code中的代码将被>编译处理为在已经为该XAML>页面创建的partial>类的范围内。因此,您定义的所有代码都必须是该部分类的成员>或变量。如果没有分部类,我将无法使用x:代码:((我想将AutoLISP的函数写入AutoCAD,以便从LISP可以打开WPF窗口。如果没有分部类或code.NET无法连接事件处理程序,这对我没有帮助。
x:Class="Lisp_Wpf.MainWindow"