La cosa più difficile circa ToolTip
s è che un ToolTip
è un oggetto si associa con un controllo, e non fa parte della struttura ad albero visuale del controllo. Quindi non è possibile popolare nel modo che ci si popola le cose nella struttura ad albero visuale, ad esempio:
<TextBox.ToolTip>
<StackPanel>
...put bound controls here
</StackPanel>
</TextBox.ToolTip>
Invece, quello che devi fare è creare una specifica istanza di una descrizione comandi, e assegnare uno stile che imposta il valore DataContext
(molto importante, è così che è possibile associare le proprietà dell'origine dati del "target di posizionamento", ovvero il controllo che visualizza il suggerimento) e il suo Template
. Quindi posiziona l'albero visivo di ToolTip
, inclusi i collegamenti, nel modello. Infine, fai riferimento allo ToolTip
nel tuo controllo.
Quindi, ecco una TextBox
cui Binding
fa convalida:
<TextBox ToolTip="{StaticResource ErrorToolTip}">
<TextBox.Text>
<Binding Source="SourceProperty">
<Binding.ValidationRules>
<DataErrorValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
utilizza questo ToolTip
:
<ToolTip x:Key="ErrorToolTip" Style="{StaticResource ErrorToolTipStyle}"/>
E la ToolTip
utilizza questo stile, che ottiene il suo contenuto alla ValidationError
proprietà del TextBox
fonte di associazione:
<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>
Non ne sono sicuro, ma penso che l'unica parte di cui sopra debba essere effettivamente impostata nello stile sia DataTrigger
che imposta DataContext
; Penso che quasi tutto il resto potrebbe essere impostato in modo esplicito nell'albero visivo di ToolTip
. Ma probabilmente non sto pensando a qualcosa di importante.
fonte
2010-02-06 19:32:51
Cosa farei per un tooltip più elaborata però? Uno che mostra più proprietà al suo interno. – Nathan
http://stackoverflow.com/questions/1825765/wpf-show-data-from-multiple-datacontexts-in-tooltip-of-itemscontrol fai riferimento a questo link che ti aiuterà nel suggerimento –