【发布时间】:2020-02-17 21:22:47
【问题描述】:
我正在使用 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 格式执行此操作吗?
感谢您的帮助!
【问题讨论】:
-
与颜色有关;我认为这应该在 XAML 中完全处理。
-
@Stefan 我如何能够仅在 XAML 中处理验证并重置为默认颜色?或者,你的意思也是代码隐藏?
-
嗯...颜色的重置可能是一个触发器。也许在焦点或类似事件上(仅限 XAML)。颜色,变为红色,可能是基于 ViewModel 中的一个布尔值,它表示授权失败。这样你的 ViewModel 就不会被颜色污染,更符合 MVVM 范式。
-
好的,但 UWP 中不支持触发器。我需要做更多这样的事情吗? stackoverflow.com/questions/31929071/…
-
嗯...是的,看起来像。我没有做过那么多 UWP,但它似乎是有效的。不过,您需要找到一个适用的“触发器”。好处是您可以仅从 ViewModel 中的单个属性定义所有颜色(以及其他内容,例如消息)。