2010-02-06 19 views
8

Sono solo due settimane in WPF quindi questa è probabilmente una domanda banale. Ho una raccolta "CellList" che ha alcune proprietà che vorrei associare a un ToolTip così quando passo il mouse su un'etichetta vengono visualizzate le informazioni dall'istanza corrente di CellList. Come lo faccio? Capisco legami semplici e anche questo semplice legame, ma non riesco a capirlo. Di seguito è il mio XAML per l'etichetta. Qualcuno potrebbe spiegarmi come posso farlo.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> 

Grazie.

risposta

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

solo provare questo

+1

Cosa farei per un tooltip più elaborata però? Uno che mostra più proprietà al suo interno. – Nathan

+1

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 –

19

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.

+0

: se lo stai mettendo in risorse locali (UserControl.Resources) o un dizionario globale assicurati di definire