首页 > 解决方案 > 如何在 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 格式执行此操作吗?

谢谢你的帮助!

标签: c#xamlmvvmuwp

解决方案


如何在 MVVM 中将背景颜色重置为默认值?

请检查PasswrodBox样式。默认的背景和边框颜色是TextControlBackgroundTextControlBorderBrush。因此,您可以在设置自定义颜色之前获取它们。

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;
            });
        }
    }

}

推荐阅读