Pokud v Silverlight aplikaci používáte validaci dat pomoci interface IDataErrorInfo nebo INotifyDataErrorInfo, je zde možné pro jednu vlastnost nastavit najednou více chybových zpráv (například že heslo je krátké a že zároveň neodpovídá požadovaným zásadám pro tvorbu hesel). Možná jste si ale všimli, že v takovém případě standardní kontroly ve validačním tooltipu zobrazují pouze chybu jedinou (tu první).
Toto můžeme napravit změnou šablony pro zobrazení tohoto tooltipu. Musíme zkopírovat styl daného controlu, kde je tooltip zobrazován (TextBox, AutoCompleteBox, apod.) a u něj změníme šablonu tooltipu. Šablona se jmenuje ValidationToolTipTemplate (nebo CommonValidationToolTipTemplate u některých controlů) a zde je její XAML kód s požadovanou úpravou zobrazení:
<ControlTemplate x:Key="ValidationToolTipTemplate">
<Grid x:Name="Root" Margin="5,0" Opacity="0" RenderTransformOrigin="0,0">
<Grid.RenderTransform>
<TranslateTransform x:Name="xform" X="-25"/>
</Grid.RenderTransform>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="OpenStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0"/>
<VisualTransition GeneratedDuration="0:0:0.2" To="Open">
<Storyboard>
<DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="X" Storyboard.TargetName="xform">
<DoubleAnimation.EasingFunction>
<BackEase Amplitude=".3" EasingMode="EaseOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
<DoubleAnimation Duration="0:0:0.2" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Root"/>
</Storyboard>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="Closed">
<Storyboard>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Root"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Open">
<Storyboard>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="X" Storyboard.TargetName="xform"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Root"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border Background="#052A2E31" CornerRadius="5" Margin="4,4,-4,-4"/>
<Border Background="#152A2E31" CornerRadius="4" Margin="3,3,-3,-3"/>
<Border Background="#252A2E31" CornerRadius="3" Margin="2,2,-2,-2"/>
<Border Background="#352A2E31" CornerRadius="2" Margin="1,1,-1,-1"/>
<Border Background="#FFDC000C" CornerRadius="2"/>
<Border CornerRadius="2">
<ItemsControl ItemsSource="{Binding (Validation.Errors), BindsDirectlyToSource=True}" Margin="8,4,8,4">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="White" MaxWidth="250" TextWrapping="Wrap" Text="{Binding ErrorContent}" UseLayoutRounding="false"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
</Grid>
</ControlTemplate>
Vykopírovaný styl s template tooltipu stačí přidat do nové nebo existující ResourceDictionary, nebo případně přímo do souboru App.xaml.