2013-08-16 15 views
6

Voglio aggiungere tooltip in listboxItem ma esso genera un problema quando c'è DisplayMemberPath. Messaggio di errore: impossibile impostare DisplayMemberPath e ItemTemplate. Quando rimuovo DisplayMemberPath, la descrizione del comando in ciascun elemento della lista funziona. Ma non voglio rimuovere DisplayMemember perché ne ho bisogno. Come risolvere questo problema?C# wpf - impossibile impostare DisplayMemberPath e ItemTemplate

   <ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" ItemsSource="{Binding Strings}" DisplayMemberPath="Toys" MouseDoubleClick="lstToys_MouseDoubleClick"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding}" ToolTip="Here is a tooltip"/> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
+0

Inserire il percorso nel collegamento DataTemplate – Paparazzi

risposta

13

DisplayMemberPath è, in effetti, un modello per una singola proprietà, illustrato in un TextBlock. Se si imposta:

<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" 
     ItemsSource="{Binding Strings}" DisplayMemberPath="Toys"> 
</ListBox> 

È equivalente a:

<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" 
     ItemsSource="{Binding Strings}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Toys}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Si può semplicemente rimuovere il percorso DisplayMemberPath e utilizzare il valore in S' Binding tuoi DataTemplate:

<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" 
     ItemsSource="{Binding Strings}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Toys}" ToolTip="Here is a tooltip!"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Edit

Se si desidera impostare un ToolTip ma mantenere la DisplayMemberPath, si può fare al ItemContainerStyle:

<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}" 
     ItemsSource="{Binding Strings}" DisplayMemberPath="Toys"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="ToolTip" Value="Here's a tooltip!"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

vorrei consigliare contro di essa. Ricorda che l'uso di DisplayMemberPath ti impedisce di associare in modo complesso il tuo modello di dati.

+0

ma non voglio rimuovere DisplayMemberPath perché è collegato ad alcune funzioni che ho creato. – user235973457

+0

@ user235973457 Vedere la mia modifica. Non puoi ancora inserire un 'ItemTemplate' se hai' DisplayMemberPath'. Se è necessario diventare più complesso per i template, sarà necessario modificare la logica (non penso che l'utilizzo di DisplayMemberPath per la logica personalizzata al di fuori della vista sia una buona idea). –

+0

funziona come una bomba. grazie per il tuo consiglio. Lo terrò a mente :) – user235973457

Problemi correlati