绑定到“设置”中定义的值
在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设置为Public
和Scope 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的回复。)