But it has been noted by the WPF guru Karl Shifflett and others that this simple mechanism for integrating tooltips and IDataErrorInfo has some draw backs. The most annoying of which is that you can’t assign a tool tip to any control that might show a data validation error! If you do assign a tooltip, the data validation error will not appear.
There is a simple work around. Use the tag of the control to hold the tooltip and use it for the content of the tooltip when there is no data validation error. Here are a few screen shots of the tooltips and data validation in action.


Here is the relevant code snippet:
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<!--
In the following xaml, Path=AdornedElement.(Validation.Errors)[0].ErrorContent} throws an exception if no error condition is present,
although the exception does not cause a crash. It shows up in the debug window which is annoying.
This work around implemented here - http://joshsmithonwpf.wordpress.com/2008/10/08/binding-to-validationerrors0-without-creating-debug-spew/
-->
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}" />
</Trigger>
<Trigger Property="Validation.HasError" Value="False">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag}" />
</Trigger>
</Style.Triggers>
The tooltip is set using the tag of the control as content in the second trigger when Validation.HasErrors is false. Note that I implemented Josh Smith's fix for debug spew.
The full code is available here.
Enjoy!
Todd Stephan
No comments:
Post a Comment