我有TextBox
使用此样式通过IDataErrorInfo
显示ToolTip
验证信息:
<Style x:Key="EntityPropertyTextBoxErrorStyle" TargetType="{x:Type TextBox}"
BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<!-- this gets rid of all adornment INCLUDING THE DEFAULT RED BORDER -->
<AdornedElementPlaceholder />
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
<Setter Property="Background" Value="MistyRose" />
</Trigger>
</Style.Triggers>
</Style>
现在我希望ToolTip
也能在键盘焦点上显示。
答案 0 :(得分:0)
我找到的最佳解决方案是使用Popup
代替ToolTip
:
<ControlTemplate x:Key="ErrorTemplate">
<StackPanel>
<AdornedElementPlaceholder x:Name="ControlWithError" />
<Popup PlacementTarget="{Binding ElementName=ControlWithError}" Placement="Top">
<Popup.IsOpen>
<MultiBinding Converter="{StaticResource AtLeastOneTrueConverter}">
<Binding Path="AdornedElement.IsMouseOver"
ElementName="ControlWithError" Mode="OneWay" />
<Binding Path="AdornedElement.IsKeyboardFocusWithin"
ElementName="ControlWithError" Mode="OneWay" />
</MultiBinding>
</Popup.IsOpen>
<Border BorderThickness="1">
<TextBlock Text="{Binding
AdornedElement.(Validation.Errors)[0].ErrorContent,
ElementName=ControlWithError}"
Background="White"
FontSize="8" />
</Border>
</Popup>
</StackPanel>
</ControlTemplate>
<Style x:Key="EntityPropertyTextBoxErrorStyle" TargetType="{x:Type TextBox}"
BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorTemplate}" />
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="Background" Value="MistyRose" />
</Trigger>
</Style.Triggers>
</Style>