WPF:如何使用装饰器进行验证?

时间:2011-09-18 03:18:37

标签: c# .net wpf validation adorner

上下文

我正在使用WPF 4创建一个Login界面,其中包含两个Label,一个TextBox(用于用户名)和一个PasswordBox。两个元素都使用相同的样式/模板。

用户名绑定到我的Username模型类中的User属性,该属性在View的View-Model(代表其DataContext

中实例化

密码使用代码隐藏事件(即:OnPasswordChanged)更新模型。

我的模型中还有两个属性,表示我的用户名和密码的有效状态,即:

  • UsernameIsValid
  • PasswordIsValid

我的View-Model和Service类更新了这些属性。

问题:

如何为这些元素Adorner创建Style并仅在UsernameIsValidPasswordIsValid属性为真时显示?

如果可能的话,我还想在参数中传递要在装饰器中显示的文本(这将是一个标注,显示文字和图标)

1 个答案:

答案 0 :(得分:3)

已经很晚了所以不提供代码,但会给你简短的答案。

  1. 设置数据验证文本框也绑定的属性(ValidationRule接口)
  2. 在文本框上设置默认样式,其中装饰符为有效时的内容
  3. 使用DataError触发器将样式设置为无效时的样式。
  4. 下面是如何让xaml代码在样式中翻转。

            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="BorderBrush" Value="Red"/>
                    <Setter Property="BorderThickness" Value="1" />
                    <Setter Property="Foreground" Value="Red" />
                    <Setter 
                        Property="ToolTip" 
                        Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}" />
                </Trigger>
            </Style.Triggers>