2010-02-06 7 views
8

Je ne suis que deux semaines dans WPF donc c'est probablement une question triviale. J'ai une collection "CellList" qui a quelques propriétés que je voudrais lier à un ToolTip alors quand je survole une information d'étiquette de l'instance actuelle de CellList est montrée. Comment je fais ça? Je comprends la reliure simple et cette liaison peut-être simple aussi mais je ne peux pas enrouler ma tête autour d'elle. Voici mon code XAML pour l'étiquette. Quelqu'un pourrait-il m'expliquer comment je peux accomplir cela?WPF Tooltip Binding

<HierarchicalDataTemplate> 
     <ListBox ItemsSource="{Binding CellList}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
       <Label Content=" " Height="20" Width="15" Background="{Binding Path=ExptNameBkg, Converter={StaticResource ExptNameToBrushConverter}}"             BorderBrush="Black" BorderThickness="1" > 
        </Label> 
       </DataTemplate>          
      </ListBox.ItemTemplate> 
     </ListBox> 
</HierarchicalDataTemplate> 

Merci.

Répondre

15
<Label Content={Binding Path=Id} ToolTip={Binding Path=Name}/> 

juste essayer cette

+1

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

+1

http://stackoverflow.com/questions/1825765/wpf-show-data-from-multiple-datacontexts-in-tooltip-of-itemscontrol renvoyez ce lien qui vous aidera –

19

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.

+0

astuce: que vous mettiez ceci dedans ressources locales (UserControl.Resources) ou un dictionnaire global assurez-vous de définir le