绑定到“设置”中定义的值

在WPF中,我可以使用与设置中定义的值绑定吗? 如果可以的话,请提供样品。

首先,您需要添加一个自定义的XML名称空间,该名称空间将devise定义设置的名称空间:

xmlns:properties="clr-namespace:TestSettings.Properties" 

然后,在您的XAML文件中,使用以下语法访问默认设置实例:

 {x:Static properties:Settings.Default} 

所以这里是最终的结果代码:

 <ListBox x:Name="lb" ItemsSource="{Binding Source={x:Static properties:Settings.Default}, Path=Names}" /> 

来源: WPF – 如何将控件绑定到设置中定义的属性?


注意:正如@Daniel和@nabulke所指出的,不要忘记将设置文件的Access Modifier设置为PublicScope to User

上面的解决scheme确实有效,但是我发现它非常详细…您可以使用自定义标记扩展来代替,可以这样使用:

 <ListBox x:Name="lb" ItemsSource="{my:SettingBinding Names}" /> 

这里是这个扩展的代码:

 public class SettingBindingExtension : Binding { public SettingBindingExtension() { Initialize(); } public SettingBindingExtension(string path) :base(path) { Initialize(); } private void Initialize() { this.Source = WpfApplication1.Properties.Settings.Default; this.Mode = BindingMode.TwoWay; } } 

更多细节在这里: http : //www.thomaslevesque.com/2008/11/18/wpf-binding-to-application-settings-using-a-markup-extension/

@ CSharper的答案不适用于我的WPF应用程序在VB.NET编码(而不是C#,不像其他WPF应用程序显然是99.999%),因为我有一个持续的编译器错误抱怨在MyApp.Properties命名空间中找不到Settings ,即使重build后也不会消失。

在我进行了大量的在线search之后,我改用了我的应用程序的主窗口XAML文件中默认创build的local XAML命名空间:

 <Window <!-- Snip --> xmlns:local="clr-namespace:MyApp" <!-- Snip --> ><!-- Snip --></Window> 

…并通过使用类似于以下内容(其中MyBooleanSetting是我在我的项目属性中定义的设置typesBoolean和范围用户,具有默认的朋友访问修饰符)通过它绑定到我的设置:

 <CheckBox IsChecked="{Binding Source={x:Static local:MySettings.Default}, Path=MyBooleanSetting, Mode=TwoWay}" Content="This is a bound CheckBox."/> 

要确保设置实际上保存,一定要打电话

 MySettings.Default.Save() 

…在代码隐藏的某个地方(比如在MainWindow.xaml.vb文件的Me.Closing事件中)。

(感谢这个Visual Studio论坛的启发,请参阅Muhammad Siddiqi的回复。)