C# “干净”;“设置”;WPF中的绑定

C# “干净”;“设置”;WPF中的绑定,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我最近在XAML中使用了很多配置设置的绑定。存储列宽/控件大小/窗口位置等。所以我想知道是否有一种简单的方法可以创建“设置/配置”值并将其绑定到XAML 现在,我只是在项目中创建一个设置,将一个可绑定属性放入XAML的DataContext中,然后从那里开始。但我的设置计数变得非常疯狂,管理它们也变得越来越痛苦(无聊、重复和烦人) 在理想的世界里,我想要一个系统,在这个系统中,我可以做这样的事情: <Window State={Binding {Settings Name="MyWindo

我最近在XAML中使用了很多配置设置的绑定。存储列宽/控件大小/窗口位置等。所以我想知道是否有一种简单的方法可以创建“设置/配置”值并将其绑定到XAML

现在,我只是在项目中创建一个设置,将一个可绑定属性放入XAML的DataContext中,然后从那里开始。但我的设置计数变得非常疯狂,管理它们也变得越来越痛苦(无聊、重复和烦人)

在理想的世界里,我想要一个系统,在这个系统中,我可以做这样的事情:

<Window State={Binding {Settings Name="MyWindowState", DefaultValue="Normal"}}/>
Height="{Binding MainWindowHeight, Mode=TwoWay, Source={x:Static p:Settings.Default}}"

如果“MyWindowsState”设置不存在,它将自动创建并存储在某处。如果MyWindowsState设置发生更改,所有使用它的绑定也会得到相应的通知和更新。如果设置检索失败,将使用DefaultValue

类似的东西是否已经存在,或者可以通过标准WPF XAML实现

我计划做一些可以做到这一点的事情,但如果已经有一个经过验证的解决方案,我希望至少看看/听听它


据我所知,至少乍一看,你可以这样做,除了在控件对控件的基础上(没有全局“设置”可以绑定),你可以使用附加的属性:

<Window loc:WindowState.Name="MyWindowState" />


在附加属性的事件处理程序中,您将有权访问设置了WindowsState.Name属性的
窗口
实例,并有权访问设置的值(“本例中的MyWindowsState”)。在那里,您开始监听(例如使用)您的
窗口
实例的所有属性的更改,这些属性是您希望保持的窗口状态的一部分。

可能是您可以使用WPF的主题化选项。您可以将控件的设置(宽度、颜色…)存储在一个主题文件中,该文件只是一个xml文件。您可以将此xml存储在某个位置,并在运行时加载它。您可以在应用程序退出并进行更改时更新此xml。然后在应用程序下次打开时加载它。

是的,很有可能。如果您有应用程序属性文件,则可以按如下方式访问它:

<Window State={Binding {Settings Name="MyWindowState", DefaultValue="Normal"}}/>
Height="{Binding MainWindowHeight, Mode=TwoWay, Source={x:Static p:Settings.Default}}"
其中,
MainWindowHeight
是一个设置(在我的例子中是一个int)。您还需要在XAML文件顶部的
窗口
UserControl
标记中包含以下内容:

xmlns:p="clr-namespace:APPLICATION_NAME.Properties"
其中APPLICATION\u NAME是应用程序的名称

编辑:绑定可以有任何模式,我只是使用双向,所以我不需要任何实际的代码来更新它。对于我的窗口的定位,这样做很好


编辑:此外,这不能动态创建设置。我会在您的应用程序中使用XML文件,创建一个类来处理该文件,然后绑定到该类的一个方法以获取/动态创建值。

您可能会发现这很有用:@PeterRitchie这是其中的1/3,但我希望避免手动在项目本身中创建设置(这样我就可以在其他项目中重用我的控件,而不用担心缺少设置),同时,如果更改,则更新所有命中配置属性的绑定。据我所知,您有一个设置文件,该文件存储的信息与Windows xaml文件相同。在xaml中,您还可以设置宽度、位置、内容……等等。所以问题是,为什么要复制xaml?为什么不更改您的构建操作启动时将xaml转换为内容并在运行时加载xaml文件,或在应用程序关闭事件时将当前窗口元素状态保存回xaml??xaml只不过是xml,通过自定义解析允许自定义tags@devhedgehog我没有在XAML文件中存储任何内容,目前我正在使用.NET内置项目设置来存储data、 这是可行的,但正如我所说,处理大量的设置会变得非常烦人。你不在xaml文件中存储任何内容是什么意思?当然,你在做窗口,所有元素都已经在xaml文件中了,否则你就不会在wpf中:)我说的是,不要让.net在baml中编译xaml,而是选择保留原始xaml,并在运行时加载它,这将允许您操作xaml文件:)这种方法将导致您的设置文件在xaml中完全消失:)