我正在尝试通过控件上的工具提示显示控件的多个验证错误,但没有找到执行此操作的方法。
我可以通过具有以下样式的工具提示轻松显示控件的单个验证错误:
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding Path=(Validation.Errors).CurrentItem.ErrorContent, RelativeSource={x:Static RelativeSource.Self}}"/>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

但是,这种方法只让我显示第一个验证错误。我试图在工具提示中获取验证错误列表,但该列表从未显示。以下是我尝试过的方法:
在工具提示中放置一个 ItemsControl,使用 Validation.Errors 作为 ItemsSource 和 CurrentItem.ErrorContent 作为要显示的文本:
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError"
Value="True">
<Setter Property="ToolTip">
<Setter.Value>
<ItemsControl>
<ItemsControl.ItemsSource>
<Binding Path="(Validation.Errors)" RelativeSource="{x:Static RelativeSource.Self}" />
</ItemsControl.ItemsSource>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding CurrentItem.ErrorContent}" Foreground="Red"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
我还尝试使用 Validation.Errors.CurrentItem 作为 ItemsSource,并使用 ErrorContent 作为要显示的文本:
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError"
Value="True">
<Setter Property="ToolTip">
<Setter.Value>
<ItemsControl>
<ItemsControl.ItemsSource>
<Binding Path="(Validation.Errors).CurrentItem" RelativeSource="{x:Static RelativeSource.Self}" />
</ItemsControl.ItemsSource> …Run Code Online (Sandbox Code Playgroud) 我想为我的WPF应用程序创建一个自定义验证器模板.
我有一个工具提示模板:
<ControlTemplate x:Key="ToolTipTemplate" TargetType="ToolTip">
<Grid Opacity="0.93" MaxWidth="200">
<Border BorderBrush="Black" BorderThickness="1,1,1,1" CornerRadius="2">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFF5FAFE" Offset="0"/>
<GradientStop Color="#FFE5EFF9" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<Border.Effect>
<DropShadowEffect Color="#FF393939" />
</Border.Effect>
<TextBlock Margin="10,10,10,10"
VerticalAlignment="Top"
TextWrapping="Wrap"
HorizontalAlignment="Left"
Text="{TemplateBinding Content}">
</TextBlock>
</Border>
</Grid>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
另一个验证模板:
<ControlTemplate x:Key="GlobalErrorTemplate">
<DockPanel>
<Ellipse x:Name="PART_icon"
DockPanel.Dock="Right"
Margin="2,0"
Width="10" Height="10">
<Ellipse.Fill>
<LinearGradientBrush>
<GradientStop Color="#11FF1111" Offset="0" />
<GradientStop Color="#FFFF0000" Offset="1" />
</LinearGradientBrush>
</Ellipse.Fill>
<Ellipse.ToolTip>
<ToolTip Template="{StaticResource ToolTipTemplate}" />
</Ellipse.ToolTip>
</Ellipse>
<AdornedElementPlaceholder x:Name="adorner" />
</DockPanel>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
控件的样式,例如:
<Style TargetType="TextBox">
<Setter Property="Validation.ErrorTemplate" Value="{StaticResource …Run Code Online (Sandbox Code Playgroud)