输入字符时,Datatrigger不更新密码箱颜色

时间:2014-06-04 12:54:02

标签: c# wpf xaml

枝。

所以我有一个密码框。 我基本上想要做的是让它的边框颜色变为红色,如果它是空的,如果不是则变为白色。 一种简单的机制,只是告知用户他们在注册表单上留空哪个字段。

经过一番研究后,我把这段代码放在一起。

<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不应该将边界更新为白色吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

“我基本上要做的是让它的边框颜色变为红色,如果它是空的,如果不是则变为白色。”

如果这是您的问题,那么只需将触发器激活Text的{​​{1}}属性即可。如果是TextBox,则""为红色;否则BorderBrush。仅供参考,你只需要一个触发器,而不是两个触发器。将“普通”默认颜色设置为控件上的属性,然后触发if WhiteText

""

<Setter Property="BorderBrush" Value="White">

P.S。在为边框红色

着色之前,您可能希望确保<Trigger Property="Text" Value=""> <Setter Property=BorderBrush" Value="Red"/> </Trigger>至少获得一次焦点