我有一个WPF应用程序。来源是here。我的要求是,如果使用方法单击“保存”按钮,我想捕获当前窗口的XAML(包括输入)并将其保存到数据库中。在应用程序中的其他地方之后,我需要从数据库加载该窗口。我使用XamlWriter进行了尝试。如果我没有在Xaml中命名控件,它的工作正常。如果我在Xaml中为任何控件添加了x:Name属性,它将产生异常,如下所示。请帮忙。
答案 0 :(得分:3)
如果您像这样将Console.WriteLine(window);
放在var window = XamlWriter.Save(this);
后面:
var window = XamlWriter.Save(this);
Console.WriteLine(window);
您得到此打印:
<MainWindow Title="MainWindow" Width="525" Height="350" Visibility="Visible" xmlns="clr-namespace:XamlReaderSample;assembly=XamlReaderSample" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation"><av:Grid><av:StackPanel Margin="0,10,0,0">
<av:TextBox Width="100" xml:space="preserve" /><av:TextBox Width="100" Margin="0,10,0,0" xml:space="preserve" />
<av:Button Name="btnSave" Width="80" Margin="0,10,0,0">Save</av:Button>
</av:StackPanel></av:Grid></MainWindow>
在此代码中,有一个名为btnSave的按钮。在其余的代码中,您尝试从该代码创建一个新窗口。一旦您尝试创建该窗口,就会有一个带有该名称的第二个按钮(除了您单击的那个按钮之外)。并导致错误。
答案 1 :(得分:0)
我这样尝试过,并且有效。
var win = new Window();
win.Name = this.Name;
win.Content = this.Content;
var xaml = XamlWriter.Save(win);
但是如果窗口中有DataGrid,我仍然不能这样做,因为DataGrid不支持序列化。需要找出其他方法。