3

我需要加载并使用 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-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>

然后我尝试在我的代码中加载这个 XAML:

String curDir = io.Path.GetDirectoryName(typeof(Lisp_Wpf.Commands).Assembly.Location);
String xamlFileName = "MyWindow.xaml";
String fileFullName = io.Path.Combine(curDir, xamlFileName);
DependencyObject depObj = default(DependencyObject);
using (io.FileStream fs = new io.FileStream(fileFullName, io.FileMode.Open)) {
    depObj = XamlReader.Load(fs) as DependencyObject;
    fs.Close();
}
if (depObj != null && depObj is Window) {
    Window win = (Window)depObj;
    acad.ShowModalWindow(win);
}

但我得到例外:

System.Windows.Markup.XamlParseException 发生:'无法创建'无法从文本'btnMyButton_Click_1'创建'Click'。' 行号“16”和行位置“31”。

我在这里找到了这样的信息:

在 x:Code for WPF 中声明的代码有几个明显的限制: ... x:Class 指令必须在父根元素上提供。...

但是如果我在我的Window元素中添加x:Class属性:

x:Class="Lisp_Wpf.MainWindow"

然后我得到异常:

'指定的类名'Lisp_Wpf.MainWindow'与实际的根实例类型'System.Windows.Window'不匹配。删除 Class 指令或通过 XamlObjectWriterSettings.RootObjectInstance 提供一个实例。行号“1”和行位置“14”。

在我的 MS Visual Studio 项目中,XML 文件具有以下属性: Build Action = None; 复制到输出目录 = 始终复制;自定义工具 =(空字符串);

我删除了这个 XAML 的部分 CS 文件。

4

2 回答 2

3

如果您想在运行时加载 xaml,则不能在 XAML 文件后面提供任何代码。可能您可以附加按钮单击的一般事件并在运行时识别控件 - 只需查看以下链接并尝试一下。

通过运行时加载 XAML XML?

于 2012-12-06T17:30:47.360 回答
2

一般提示(我没有重现您的具体问题):

在 WPF 中,如果 Visual Studio 中的生成操作设置为“资源”(您可以在 xaml 文件的属性下找到该设置),也会出现此错误。将 Build Action 设置为“Page”,它将编译!

于 2014-01-24T16:25:17.800 回答