最近,我一直在研究WPF应用程序,并且我一直在为项目添加用户设置。对于其中一个设置SaveDir
,我需要将默认值作为方法System.IO.Directory.GetCurrentDirectory()
的返回字符串。
SaveDir in Visual Studio designer
我看了一下visual studio中设计师背后的代码,发现了这个:
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string SaveDir {
get {
return ((string)(this["SaveDir"]));
}
set {
this["SaveDir"] = value;
}
}
我尝试将System.Configuration.DefaultSettingValueAttribute
中的引号删除到方法System.IO.Directory.GetCurrentDirectory()
,但这引发了以下错误:
属性参数必须是属性参数类型
的常量表达式,typeof表达式或数组创建表达式
如何将此设置的默认值设置为应用程序的当前目录?
当应用程序启动时,我更新如下设置:
Settings.Default.SaveDir =
Directory.Exists(Settings.Default.SaveDir)
? Settings.Default.SaveDir
: Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
当用户重置所有设置时,这会给我一些问题。我想知道是否有更有效的方法来做到这一点。
答案 0 :(得分:0)
一种可能的解决方案是创建一个包装用户可以更改的配置属性的类,并添加一些空值或空值的控件。
这将允许您在需要时创建属性并返回默认值:
public class MyAppSettings
{
public string SaveDir
{
get
{
if(Properties.Settings.Default.SaveDir.Equals(String.Empty))
{
return Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
}
return Properties.Settings.Default.SaveDir;
}
}
}
更改或修改自动生成的代码可能会有一点风险,因为您冒着IDE意外更改它的风险。
我希望这会有所帮助。
答案 1 :(得分:0)
您似乎尝试将默认值设置为错误的属性名称DefaultSaveDir
,它应该是' SaveDir
'
Settings.Default.SaveDir =
Directory.Exists(Settings.Default.SaveDir)
? Settings.Default.SaveDir
: Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Settings.Default.Save() //<-- call save to keep the default value
<强>更新强>
可能是您可以挂钩此事件,重置默认值
Settings.Default.PropertyChanged += (o, e1) =>
{
Console.WriteLine(e1.PropertyName);
};
希望它有所帮助。
答案 2 :(得分:0)
实际上它不会起作用。您无法将设置SaveDir
的值设置为Directory.GetCurrentDirectory()
。
然而,有几种方法可以解决这个问题。当您致电Settings.Default.Reset()
时,您可以使用相同的方法重新运行设置SaveDir
值的代码。
void ResetMySettings
{
// Method where settings are reset
Properties.Settings.Default.Reset();
// Set value of SaveDir
CheckSaveDirValue();
}
...
private void CheckSaveDirValue()
{
Settings.Default.SaveDir =
Directory.Exists(Settings.Default.SaveDir)
? Settings.Default.SaveDir
: Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
}
然而,这不是一个好主意。您不希望让最终用户使用应用程序目录,如果他们意外删除了.dll
文件会怎样?
最好的办法是创建另一个应用程序目录,用于存储所有用户的文件。