枝。
所以我有一个密码框。 我基本上想要做的是让它的边框颜色变为红色,如果它是空的,如果不是则变为白色。 一种简单的机制,只是告知用户他们在注册表单上留空哪个字段。
经过一番研究后,我把这段代码放在一起。
<Window.Resources>
<conv:rules x:Key="isNullConverter"/>
<Style TargetType="{x:Type PasswordBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Password, ValidatesOnDataErrors=False, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource isNullConverter}}" Value="False">
<Setter Property="BorderBrush" Value="White"/>
</DataTrigger>
<DataTrigger Binding="{Binding Password, ValidatesOnDataErrors=False, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource isNullConverter}}" Value="True">
<Setter Property="BorderBrush" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
&#39; CONV&#39;设置参考规则&#39;命名空间。
&#39;规则&#39;是我在下面的代码中的类。
using System.Windows.Data;
using System.Globalization;
namespace Masca
{
public class rules : IValueConverter, INotifyPropertyChanged, IDataErrorInfo
{
private string something;
public string Password
{
get
{
return something;
}
set
{
if (something!= value)
{
something = value;
RaisePropertyChanged("Password");
}
}
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
value = false;
}
if (value != null)
{
value = true;
}
return value;
}
private void RaisePropertyChanged(string prop)
{
if (PropertyChanged == null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public string Error
{
get { return null; }
}
每次我运行程序时,即使我输入了某些内容,密码框周围也总会出现红色边框。 DataTrigger不应该将边界更新为白色吗?或者我错过了什么?
答案 0 :(得分:0)
“我基本上要做的是让它的边框颜色变为红色,如果它是空的,如果不是则变为白色。”
如果这是您的问题,那么只需将触发器激活Text
的{{1}}属性即可。如果是TextBox
,则""
为红色;否则BorderBrush
。仅供参考,你只需要一个触发器,而不是两个触发器。将“普通”默认颜色设置为控件上的属性,然后触发if White
为Text
:
""
和
<Setter Property="BorderBrush" Value="White">
P.S。在为边框红色
着色之前,您可能希望确保<Trigger Property="Text" Value="">
<Setter Property=BorderBrush" Value="Red"/>
</Trigger>
至少获得一次焦点