c# - 如何在 MVVM 中将背景颜色重置为默认值?
问题描述
我正在使用 MVVM 在 UWP 中创建登录页面。当输入不正确的密码时,我希望将 PasswordBox 的边框更改为红色以指示它不正确。
我将 SolidColorBrush 变量绑定到边框和背景。
private SolidColorBrush _validationColorBorder;
public SolidColorBrush ValidationColorBorder
{
get{ return _validationColorBorder; }
set
{
_validationColorBorder = value;
RaisePropertyChanged();
}
}
private SolidColorBrush _validationColorBackground;
public SolidColorBrush ValidationColorBackground
{
get { return _validationColorBackground; }
set
{
_validationColorBackground = value;
RaisePropertyChanged();
}
}
在 ViewModel 中,我使用以下方法将颜色设置为验证颜色:
ValidationColorBackground = (SolidColorBrush)Application.Current.Resources["TextBoxBackgroundThemeBrush"];
ValidationColorBorder = (SolidColorBrush)Application.Current.Resources["TextBoxBorderThemeBrush"];
我的问题是,在我将密码框背景和边框设置为这些颜色后,我希望之后能够将它们设置回默认颜色。
我将如何将颜色设置回我的应用程序的默认颜色?并且能够通过将我的 SolidColorBrush 变量设置为这些默认颜色来以 MVVM 格式执行此操作吗?
谢谢你的帮助!
解决方案
如何在 MVVM 中将背景颜色重置为默认值?
请检查PasswrodBox
样式。默认的背景和边框颜色是TextControlBackground
和TextControlBorderBrush
。因此,您可以在设置自定义颜色之前获取它们。
defaultBgColor = (SolidColorBrush)Application.Current.Resources["TextControlBackground"];
defaultBorderColor = (SolidColorBrush)Application.Current.Resources["TextControlBorderBrush"];
如果你想回滚,你只需要将上面的值复制到你的自定义绑定属性中。更多内容请参考以下内容。
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private SolidColorBrush defaultBgColor;
private SolidColorBrush defaultBorderColor;
public ViewModel()
{
defaultBgColor = (SolidColorBrush)Application.Current.Resources["TextControlBackground"];
defaultBorderColor = (SolidColorBrush)Application.Current.Resources["TextControlBorderBrush"];
ValidationColorBackground = (SolidColorBrush)Application.Current.Resources["TextBoxBackgroundThemeBrush"];
ValidationColorBorder = (SolidColorBrush)Application.Current.Resources["TextBoxBorderThemeBrush"];
}
private SolidColorBrush _validationColorBorder;
public SolidColorBrush ValidationColorBorder
{
get { return _validationColorBorder; }
set
{
_validationColorBorder = value;
RaisePropertyChanged();
}
}
private void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private SolidColorBrush _validationColorBackground;
public SolidColorBrush ValidationColorBackground
{
get { return _validationColorBackground; }
set
{
_validationColorBackground = value;
RaisePropertyChanged();
}
}
public ICommand BtnClickCommand
{
get
{
return new RelayCommand(() =>
{
ValidationColorBackground = defaultBgColor;
ValidationColorBorder = defaultBorderColor;
});
}
}
}
推荐阅读
- c# - c# foreach loop list with class
- javascript - Bootstrap 需要 popper.js,尽管在 Angular 中使用 bundle
- google-chrome - 使用 Web Audio API 时不同的音量级别不起作用
- amazon-web-services - CloudFormation 模板不选择 KeyPair
- c++ - 何时出现 UB,因为 ADL 在实例化时未找到最佳重载匹配?
- python - 从未等待过的不和谐python机器人
- python - 如何解决 TypeError: __init__() got an unexpected keyword argument 'attrs' Django
- pdf - 使用 Uri 用 Kotlin 解析 pdf?
- javascript - 无法使用javascript更改输入类型=颜色字段的颜色
- node.js - 在创建模式期间是否可以从 mongoDB 检索值?