您可以在用户设置中存储任何可序列化的内容。所以只要定义你的用户选择类和你的页面布局类,你就可以让它像任何字符串或整数一样持久化。
(你可以在这里看到:Custom enum as application setting type in C#?)
编辑:在这篇文章中,您可以看到您可以在您的偏好中使用任何对象,包括您在项目中自己定义的对象。为此,您必须提供完整的类名,包括项目的 NameSpace (MyNameSpace.MyPreferenceStorageClass)。
编辑2:所以我将用小例子来描述更多。
1)您必须定义一个将存储您的设置的类。我为我的示例选择任意名称:
Public Class UserChoices
Public Property DisplayInColor As Boolean = False
Public Property UseKeyboard As Boolean = True
End Class
一定要设置一个默认值。您需要在编写类后成功编译才能使该类位于当前命名空间内。
2)然后进入项目的设置窗口。添加具有所需名称的设置变量。
我称之为 AppUserChoices。然后选择类型,转到“浏览”,然后键入MyNameSpace .UserChoices 作为类型。
(显然,用您的命名空间替换 'MyNameSpace' ... ;-) )
3)你完成了。我编写了一些代码来使用设置(我把它放在我的 Application 的 Startup 事件处理程序中):
启动它几次。第一次,它应该报告用户选择什么都不是。然后它们就可以了,并且每次颜色设置都会在颜色和黑白之间切换。
Private Sub Application_Startup
(ByVal sender As System.Object, ByVal e As System.Windows.StartupEventArgs)
If My.Settings.AppUserChoices Is Nothing Then
MessageBox.Show("AppUserChoices is nothing")
My.Settings.AppUserChoices = New UserChoices
My.Settings.Save()
Else
MessageBox.Show("AppUserChoices is **not** nothing")
My.Settings.AppUserChoices.DisplayInColor = Not My.Settings.AppUserChoices.DisplayInColor
My.Settings.Save()
If My.Settings.AppUserChoices.DisplayInColor Then _
MessageBox.Show("show colors") _
Else _
MessageBox.Show("show in B&W")
End If
End Sub
4) 请注意,您可能希望使用 UserChoices 类来实现 INotifyPropertyChange,以防您在代码中修改它们。(示例:如果用户更改了“DisplayInColor”,您可能希望将“PrintInColor”设置为相同的值。)
5) 对于用户对页面布局的偏好,同样创建一个类来存储布局偏好和设置中的新项目。
6)绑定到设置值,好吧,让另一个 StackOverflow 帖子完成这项工作:
绑定到设置中定义的值