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

发布于 2024-12-05 01:56:57 字数 726 浏览 3 评论 0原文

上下文:

我正在使用 WPF 4 创建一个登录界面,其中包含两个 Label、一个 TextBox(用于用户名)和一个 <代码>密码框。两个元素使用相同的样式/模板。

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

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

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

  • UsernameIsValid
  • PasswordIsValid

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

问题:

如何为这些元素的 Style 创建一个 Adorner 并仅在 UsernameIsValid 或 < code>PasswordIsValid 属性是否为 true?

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

Context:

I'm creating a Login interface using WPF 4 which consists of two Labels, one TextBox (for the username) and one PasswordBox. Both elements use the same style / template.

The username is bound to a Username property in my User model class, which is instantiated in the View's View-Model (which represents its DataContext)

The password updates the model using code-behind events (i.e.: OnPasswordChanged).

I also have two properties in my model which represents the valid state of my username and password, i.e.:

  • UsernameIsValid
  • PasswordIsValid

Those properties are updated by my View-Model and Service classes.

Question:

How can I create an Adorner for these elements' Style and only display it when the UsernameIsValid or PasswordIsValid properties are true ?

I'd also like, if possible, to pass in parameter the text to be displayed in the adorner (which will be a callout, which displays text, and an icon)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

∞觅青森が 2024-12-12 01:56:57

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

  1. 在文本框绑定的属性上设置数据验证(ValidationRule 接口)
  2. 使用装饰器将文本框上的默认样式设置为有效时应有的
  3. 样式 使用 DataError 触发器将样式设置为无效时应有的样式。

下面是如何获取要翻转样式的 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>

It's late so not providing code but will give you short answer.

  1. Setup Data Validation on the properties the text boxes are bound too (ValidationRule interface)
  2. Set default style on text box with adorner to what it should be when valid
  3. Set a style to what it should be when invalid using the DataError trigger.

Below is how you get the xaml code to flip in the style.

        <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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文