Невозможно загрузить XAML через XamlReader - PullRequest
0 голосов
/ 30 октября 2018

У меня есть приложение WPF. Источник здесь . Мое требование: если вы нажмете кнопку «Сохранить», я захочу захватить XAML текущего окна, включая входные данные, и сохранить его в базе данных. После этого в приложении, где-то еще, мне нужно загрузить это окно из БД. Я попробовал это, используя XamlWriter . Работает нормально, если я не назвал элементы управления в Xaml. Если я добавлю атрибут x: Name в Xaml для любого элемента управления, он выдаст исключение, как показано ниже. Пожалуйста, помогите.

enter image description here

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Я пытался так, и это сработало.

var win = new Window();
win.Name = this.Name;
win.Content = this.Content;
var xaml = XamlWriter.Save(win);

Но все равно я не могу сделать это, если в окне есть DataGrid, поскольку DataGrid не поддерживает сериализацию. Нужно выяснить какой-то другой метод.

0 голосов
/ 30 октября 2018

если вы поставите 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. в остальной части вашего кода вы пытаетесь создать новое окно из этого кода. как только вы попытаетесь создать это окно, у вас будет 2-я кнопка (помимо той, которую вы нажали) с этим именем. и это вызывает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...