Есть код с рекурсией внутри, проблема в том что вываливается переполнение стека, с тем учетом что условие выхода из рекурсивного перехода предусмотрел, возможно оно не правильное?
//Метод сохранения TreeView в XML
//current - текущий элемент XML
//item - текущий элемент TreeView
private void SaveTreeItems(XElement current, TreeViewItem item)
{
foreach (TreeViewItem tree_item in item.Items)
{
Border b = tree_item.Header as Border;
StackPanel stk = b.Child as StackPanel;
Border port_in_border = stk.Children[0] as Border;
TextBlock port_in = port_in_border.Child as TextBlock;
Border port_out_border = stk.Children[1] as Border;
TextBlock port_out = port_in_border.Child as TextBlock;
TextBlock address = stk.Children[2] as TextBlock;
TextBlock ip = stk.Children[3] as TextBlock;
string _ip = ip.Text;
string _address = address.Text;
string _port_in = port_in.Text;
string _port_out = port_out.Text;
XElement newNode = new XElement(_address,
new XAttribute("IP", _ip),
new XAttribute("port_in", _port_in),
new XAttribute("port_out", _port_out));
//Возможно здесь неправильное условие выхода из рекурсии
if (item.HasItems)
{
SaveTreeItems(newNode, item);
}
current.Add(newNode);
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
TreeViewItem root = DeviceTree.Items[0] as TreeViewItem;
XElement root_ = new XElement(root.Header.ToString());
XDocument xdoc = new XDocument(root_);
TreeViewItem tw = DeviceTree.Items[0] as TreeViewItem;
SaveTreeItems(root_, tw);
xdoc.Save("device.xml");
}
Если вам нужно строковое представление вашего TreeView
используйте класс System.Windows.Markup.XamlWriter
, для того что бы осуществить обратную операцию, т.е. получить из строки объект используйте System.Windows.Markup.XamlReader
. В коде это выглядит так:
// Получаем строку, которая представляет ваш TreeView.
var str = System.Windows.Markup.XamlWriter.Save(myTree);
// Из строки получаем объект TreeView.
var obj = (TreeView)System.Windows.Markup.XamlReader.Parse(str);
Так как XAML это диалект XML, то при желании из полученной строки мы можем получить XDocument
.
var str = System.Windows.Markup.XamlWriter.Save(myTree);
var doc = XDocument.Parse(str);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Какой есть генератор формы с неограниченной вложенностью input элементов? Должна быть поддержка строк и массивов
После загрузки картинки в AdminFormElement::image на странице происходит эдакое