WPF Material Design:如何将设置文本绑定到HintAssist.Hint属性?
在WPF Material Design中绑定设置文本作为PasswordBox的提示语
嗨,我来帮你搞定这个问题!要把Material Design PasswordBox的提示语绑定到你的设置文本,其实很简单,分两种常见场景来操作:
场景1:使用WPF内置的应用程序设置(Properties.Settings)
如果你的提示语存在Visual Studio自带的Settings.settings文件里,按下面步骤来:
- 先确认你已经在Settings.settings里定义好了对应的字符串设置项,比如命名为
PremiumPasswordHint。 - 在XAML的根节点(比如Window/UserControl)添加properties命名空间,替换成你自己的项目名称:
xmlns:properties="clr-namespace:YourProjectName.Properties"
- 修改PasswordBox的
HintAssist.Hint属性,用静态绑定指向你的设置项:
<PasswordBox Visibility="Visible" Name="premiumPasswordEs" Margin="20 0 0 0" Width="200" materialDesign:HintAssist.Hint="{Binding Source={x:Static properties:Settings.Default}, Path=PremiumPasswordHint}" Style="{DynamicResource MaterialDesignFloatingHintPasswordBox}" VerticalAlignment="Center"/>
这样运行时,提示语就会自动读取Settings里的对应值啦。如果之后设置值有变更,记得调用Settings.Default.Save()保存,重启应用就能生效。
场景2:使用MVVM架构中的ViewModel属性
如果你的项目用了MVVM模式,提示语存在ViewModel里的话:
- 确保你的ViewModel里有一个实现了
INotifyPropertyChanged的属性,比如:
private string _premiumPasswordHint; public string PremiumPasswordHint { get => _premiumPasswordHint; set { _premiumPasswordHint = value; OnPropertyChanged(); // 这里要实现INotifyPropertyChanged的通知方法 } }
- 把PasswordBox的DataContext设置为你的ViewModel(可以通过Window/UserControl的DataContext绑定,或者直接在XAML里指定)。
- 直接绑定Hint属性到ViewModel的对应属性:
<PasswordBox Visibility="Visible" Name="premiumPasswordEs" Margin="20 0 0 0" Width="200" materialDesign:HintAssist.Hint="{Binding PremiumPasswordHint}" Style="{DynamicResource MaterialDesignFloatingHintPasswordBox}" VerticalAlignment="Center"/>
这种方式的好处是,当ViewModel里的PremiumPasswordHint值动态改变时,提示语会自动更新,不需要重启应用。
内容的提问来源于stack exchange,提问作者MrEmii




