【发布时间】:2020-06-14 19:44:37
【问题描述】:
我正在尝试为文本框制作一个不错的错误消息。文本框:
<DockPanel DockPanel.Dock="Top">
<Label Content="Name: "/>
<TextBox DockPanel.Dock="Top" Text="{Binding Name, ValidatesOnExceptions=True, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource textBoxInError}">
</TextBox>
</DockPanel>
我从工具提示开始。文本框的错误样式:
<!-- Style for the error tooltip for fields -->
<Style x:Key="textBoxInError" TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
这还不够,需要更好的消息。使用此解决方案,在您悬停该字段之前,错误是不可见的:
所以我发现我可以创建另一个节点来接收来自文本框的错误消息:
<DockPanel DockPanel.Dock="Top">
<Label Content="Name: "/>
<TextBox DockPanel.Dock="Top" Name="editNodeName" Text="{Binding Name, ValidatesOnExceptions=True, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource textBoxInError}">
</TextBox>
<TextBlock Text="{Binding (Validation.Errors)[0].ErrorContent, ElementName=editNodeName}" TextWrapping="Wrap"/>
</DockPanel>
这是我想要的样机,这不需要鼠标悬停可见:
它不必完全一样,但它不应该压缩复选框或以其他方式侵入表单,并且在没有错误时它不应该是可见的。
我可以在字段旁边浮动错误消息文本吗?也许以某种方式使用绑定将位置绑定到字段的位置?
【问题讨论】:
-
@ASh 我不想显示实际的工具提示,但我可以设置一些元素。我也不太明白这个问题的公认答案是什么意思。
-
WPF Tooltip 不是简单的文本,它是可以设置样式的元素。
-
它仍然是一个需要鼠标悬停的工具提示。我希望在检测到错误值后立即显示该消息。我在我的问题中澄清了这一点。
标签: c# wpf data-binding