【发布时间】:2011-09-01 17:05:00
【问题描述】:
不知道红色验证边框的术语,有吗?
我有一个不继承自IDataErrorInfo的视图模型。它将一个 int 属性绑定到一个“数量”文本框,因此当输入字母字符时,它会获得一个红色的验证边框。这是完美的行为。该红色边框由操作系统设置样式,因此很合适。它不需要我继承或实现 IDataErrorInfo;它既简单又自动。
有没有办法让绑定到字符串的 texbox 获得相同的行为,当字符串为空(或开始为空)时变为红色。我知道我可以将它们绑定到一个继承自 IDataErrorInfo 的对象来执行此操作,但我想知道是否存在像上述那样简单的解决方案。
我认为当您输入字母字符时,对数量的 int 绑定会在 setter 中引发异常。如果您将值更改为空,则在字符串的 setter 中执行相同操作,但如果它开始为空则不是红色(因为尚未调用 setter),并且 setter 导致 Visual Studio 跳入首先是调试器,数量字段不这样做。
这可能吗,还是 int 验证只是一个幸运的例外?
编辑:除非您在使用 tabcontrol 的界面上工作,否则 HB 的以下解决方案可以完美运行。有关详细说明,请参阅此SO question,但这里有一个简短的说明:验证错误绘制在切换选项卡时丢弃的图层上。有一个简单的解决方案,除非您的验证错误在当前未选中的选项卡上的控件上引发。突然间,解决方案变得非常复杂,而且在我看来,非常hacky。
编辑:我认为数据触发器可能是处理此问题的最简单方法,而且它也易于重复使用。
<Style x:Key="TextBoxEmptyError" TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text.Length}" Value="0">
<Setter Property="BorderBrush" Value="{StaticResource ResourceKey=SemiTransparentRedBrushKey}"/>
<Setter Property="BorderThickness" Value="2" />
</DataTrigger>
</Style.Triggers>
</Style>
【问题讨论】:
-
红色边框是
ErrorTemplate的一个实例,不知道除此之外是否还有合适的术语......
标签: wpf validation binding