我的容器中有一些元素,想要保存这些元素的所有属性。我按VisualTreeHelper
列出这个元素并将其属性保存在DB中,问题是如何检索这些属性并影响它们?我认为Silverlight
有一些陈述与Sql-Server
中的Exec相似。
我将属性保存在由分号分隔的一行中。(如果您有任何建议,请欣赏)
编辑:假设这种情况:最终用户从Mytoolbox(像Grid
这样的容器)中选择一个工具,一个对话框显示了其创建属性,最后绘制了Grid
。在恢复中,他/她选择一个元素(如Button
)并将其放在网格的一个单元格上。现在我想保存他/她创建的工作空间!我的RootLayout
有一个容器控件,因此任何元素都是其子元素。 HERETOFORE 我想创建一个包含所有一般属性的字符串(不是全部)并保存到DB
,当我加载此控件时,我通过我保存的type
创建一个元素,并通过我保存的属性对其进行影响;使用EXEC
命令之类的。
答案 0 :(得分:1)
您可能需要尝试Isolated File Storage,您可以将设置保存/加载到本地硬盘。这样做非常简单,只需几行代码即可。
我认为Silverlight有一些表现得像Exec
的声明
不,不是:)
修改:好的,这里有一个关于如何将本地保存的设置应用到UI元素的指南。
首先,确定您的可设置控件将实现的接口:
public interface IMySettableSettingsControl
{
Dictionary<string, object> RetrieveSettings();
void ApplySettings(Dictionary<string, object> settings);
}
现在将此界面添加到您的控件中,这些控件将在本地保留其设置:
public MyControl : IMySettableSettingsControl
{
public void ApplySettings(Dictionary<string, object> settings)
{
if (settings.Key.Contains("TextboxContents"))
someTextBox.Text = (string) settings["TextboxContents"];
if (settings.Key.Contains("Height"))
this.Height = (double) settings["Height"];
((IMySettableSettingsControl) someChildControl).ApplySettings( (Dictionary<string, object>) settings["MyChildControl"])
}
public Dictionary<string, object> RetrieveSettings()
{
Dictionary<string, object> localSettings = new Dictionary<string, object>();
localSettings.Add("Height", this.Height);
localSettings.Add("TextboxContents", someTextBox.Text);
localSettings.Add("MyChildControl", ((IMySettableSettingsControl) someChildControl).RetrieveSettings();
}
}
当然,你可以随心所欲地获得你所喜欢的 - 我上面所说明的只是一个例子。我过去所做的是让我的MainPage.cs文件从Isolated Storage加载设置,然后在它创建的每个控制器的构造函数中传递Dictionary,然后每个控制器将它传递给它创建的每个视图。要保存设置,我处理应用程序的Exit事件:
Application.Current.Exit += new EventHandler(Current_Exit);
然后在处理程序中:
private void Current_Exit(object sender, EventArgs e)
{
Dictionary<string, object> settings = new Dictionary<string, object>();
//call each UI control or controller, passing in the settings object
//now i can persist the settings dictionary to IsolatedStorage
}
当然,当我这样做时,我使用自定义数据对象来保存我的设置,如果找不到本地实例(或发现本地实例已损坏,我可以选择调用web服务来检索默认设置,因为由于某种原因,它的保存被中断了。)
因此,请参考上面的示例,将其切片并切块,然后根据您的需要进行更改。希望它有所帮助。