我正在开发一个小程序,我想将一些控制状态和属性保存到配置文件中。但是,由于多种原因,我不想使用“传统”设置文件,而是将其序列化或只是保存到特定文件中。
例如,获取window1的TextBox1.Text并将其序列化,这样当我启动应用程序时,我可以重新使用旧值。例如,某些复选框也是如此。
如何做到这一点?这不是一个“功课”项目,因为我在业余时间从零开始学习C#。我已经寻找了几种方法,但是它们使用自定义序列化类(特别是针对该purpouse)或使用Visual Studio中的标准.settings文件设置过于复杂。此外,我正在使用C#,该程序使用WPF而不是MFC。
答案 0 :(得分:2)
我们之前通过遍历可视树并将每个项目保存到XML文件来解决这个问题。 XML布局将反映可视树。重新加载树后,您可以遍历XML文件以加载默认值。
private void ForEachControlRecursive(object root, Action<Control> action, bool IsRead)
{
Control control = root as Control;
//if (control != null)
// action(control);
// Process control
ProcessControl(control, IsRead);
// Check child controls
if (root is DependencyObject && CanWeCheckChildControls(control))
foreach (object child in LogicalTreeHelper.GetChildren((DependencyObject)root))
ForEachControlRecursive(child, action, IsRead);
}
ProcessControl
基本上每个控件类型都有一个开关,路由到给定控件的自定义函数。
例如:
private void ProcessControl(TextBox textbox, bool IsRead)
{
//1. textbox.Name; - Control name
//2. Text - Control property
//3. textbox.Text - Control value
if (IsRead)
{
// Class that reads the XML file saving the state of the visual elements
textbox.Text = LogicStatePreserver.GetValue(textbox).ToString();
}
else
{
LogicStatePreserver.UpdateControlValue(textbox, textbox.Text);
}
}