Я пытаюсь сделать хорошее сообщение об ошибке для текстового поля. Текстовое поле:
<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>
Этого недостаточно, требуется более качественное сообщение. При таком решении ошибка не отображается, пока вы не наведете курсор на поле: ![enter image description here](https://i.stack.imgur.com/0fRJ7.png)
Итак, я обнаружил, что могу создать еще один узел, который будет получать сообщение об ошибке из текстового поля:
<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>
Это выглядит очень уродливо и несколько сжимает текстовое поле:
![enter image description here](https://i.stack.imgur.com/D4XB1.png)
Вот макет того, что я хотел бы вместо этого не требуется, чтобы указатель мыши был видимым :
![enter image description here](https://i.stack.imgur.com/LVCz3.png)
Это не обязательно должно быть так, но он не должен сжимать флажок или иным образом нарушать форму, и он не должен быть виден, когда нет ошибки.
Можно ли поместить текст сообщения об ошибке рядом с полем? Может быть, как-то привязать позицию к позиции поля, используя привязку?