La chose la plus délicate sur ToolTip
s est qu'un ToolTip
est un objet que vous associez à un contrôle, et ne fait pas partie de l'arbre visuel du contrôle. Donc, vous ne pouvez pas le remplir de la manière que vous peuplez les choses dans l'arbre visuel, par exemple:
<TextBox.ToolTip>
<StackPanel>
...put bound controls here
</StackPanel>
</TextBox.ToolTip>
Au lieu de cela, ce que vous devez faire est de créer une instance spécifique d'une info-bulle, et lui attribuer un style définit son DataContext
(très important, c'est ainsi que vous pouvez lier aux propriétés de la source de données de sa "cible de placement", c'est-à-dire le contrôle qui affiche l'info-bulle) et son Template
. Placez ensuite l'arborescence visuelle du ToolTip
, y compris les liaisons, dans le modèle. Enfin, référence le ToolTip
dans votre contrôle.
Alors, voici une TextBox
dont Binding
ne validation:
<TextBox ToolTip="{StaticResource ErrorToolTip}">
<TextBox.Text>
<Binding Source="SourceProperty">
<Binding.ValidationRules>
<DataErrorValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Il utilise cette ToolTip
:
<ToolTip x:Key="ErrorToolTip" Style="{StaticResource ErrorToolTipStyle}"/>
Et le ToolTip
utilise ce style, qui obtient son contenu de la propriété ValidationError
du TextBox
de la liaison de la source:
<Style x:Key="ErrorToolTipStyle" TargetType="{x:Type ToolTip}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="HasDropShadow" Value="True"/>
<Setter Property="DataContext" Value="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToolTip">
<Border
Name="Border"
BorderThickness="1"
BorderBrush="LightGray">
<StackPanel Orientation="Vertical">
<Label Background="Firebrick" Foreground="White" FontWeight="Bold" Margin="4">Validation error</Label>
<TextBlock Margin="10" Text="{Binding ValidationError}"/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="HasDropShadow" Value="true">
<Setter TargetName="Border" Property="CornerRadius" Value="4"/>
<Setter TargetName="Border" Property="SnapsToDevicePixels" Value="true"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Je ne suis pas certain de cela, mais je pense que la seule partie de ce qui précède doit être définie dans le style est le DataTrigger
définissant le DataContext
; Je pense que la plupart des autres éléments pourraient être définis explicitement dans l'arborescence visuelle de ToolTip
. Mais je ne pense probablement pas à quelque chose d'important.
Qu'est-ce que je peux faire pour une info-bulle plus élaborée si? Un qui montre plusieurs propriétés en elle. – Nathan
http://stackoverflow.com/questions/1825765/wpf-show-data-from-multiple-datacontexts-in-tooltip-of-itemscontrol renvoyez ce lien qui vous aidera –