我在我的ViewModel中实现idataerrorinfo以对我的一些绑定属性执行验证。然后我尝试使用以下内容设置tooltip并自动显示它:
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}"/>
<Setter Property="ToolTip.IsOpen" Value="True"></Setter>
<Setter Property="ToolTip.StaysOpen" Value="True"></Setter>
<Setter Property="ToolTip.Placement" Value="Bottom"></Setter>
</Trigger>
</Style.Triggers>
</Style>
问题在于,tooltip被设置时,除非我将光标放在输入上,否则它不会出现。我想在验证失败时自动显示工具提示。
我可以想到许多验证数据的方法,但我正在寻找一种简化,易于重用且不会混淆其余代码(和UI)的解决方案。如果有更好的方法这样做然后我想听听它。
干杯
答案 0 :(得分:1)
我同意Viv。我使用样式为样式中的文本框定义validation.errortemplate。它在控件下添加了一个带有错误消息的红色框。你可以尝试这个并调整它。我不认为强制工具提示是正确的想法。如果你真的必须具备该功能,我会使用validation.errortemplate中的弹出窗口。
<Style x:Key="FTC_ValidateTextBox" BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
<Setter Property="FontFamily" Value="Open Sans Condensed"/>
<Setter Property="FontSize" Value="19" />
<Setter Property="Margin" Value="3,3,15,6"/>
<Setter Property="Padding" Value="10,3"/>
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Background" Value="{StaticResource DetailTextBox}" />
<Setter Property="BorderBrush" Value="{StaticResource MediumGray}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="{StaticResource MediumRed}" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<AdornedElementPlaceholder x:Name="parentTextBox" />
<TextBlock Grid.Row="1" Style="{StaticResource DetailError}"
Text="{Binding AdornedElement.(Validation.Errors).CurrentItem.ErrorContent, ElementName=parentTextBox}"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding (Validation.Errors).CurrentItem.ErrorContent, RelativeSource={x:Static RelativeSource.Self}}"/>
<Setter Property="BorderBrush" Value="{StaticResource MediumRed}"/>
<Setter Property="Foreground" Value="{StaticResource MediumRed}"/>
<Setter Property="Margin" Value="3,3,15,31"/>
</Trigger>
</Style.Triggers>
</Style>