2013-08-16 13 views
6

Ich möchte Tooltip in listboxItem hinzufügen, aber es startet Problem, wenn es DisplayMemberPath gibt. Die Fehlermeldung besagt, dass sowohl DisplayMemberPath als auch ItemTemplate nicht festgelegt werden können. Wenn ich DisplayMemberPath entfernte, funktioniert Tooltip in jedem Listenelement. Aber ich möchte DisplayMember nicht entfernen, weil ich es brauche. Wie man dieses Problem löst?C# wpf - kann nicht sowohl DisplayMemberPath als auch ItemTemplate setzen

   <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

Setzen Sie diesen Pfad in die DataTemplate-Bindung – Paparazzi

Antwort

13

DisplayMemberPath ist in der Tat eine Vorlage für eine einzelne Eigenschaft, in einem TextBlock gezeigt. Wenn Sie ein:

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

Es ist äquivalent zu:

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

Sie einfach den DisplayMemberPath Pfad entfernen und den Wert in Ihrem DataTemplate verwenden ‚s Binding:

<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> 

bearbeiten

Wenn Sie eine ToolTip festlegen möchten aber die DisplayMemberPath halten, können Sie es tun am 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> 

ich davon abraten würde. Denken Sie daran, dass Sie mit DisplayMemberPath keine komplexe Bindung in Ihrer Datenvorlage mehr stoppen können.

+0

, aber ich möchte DisplayMemberPath nicht entfernen, da es mit einigen Funktionen verknüpft ist, die ich erstellt habe. – user235973457

+0

@ user235973457 Siehe meine Bearbeitung. Sie können immer noch kein 'ItemTemplate' setzen, wenn Sie' DisplayMemberPath' haben. Wenn Sie für Templating komplexer werden müssen, müssen Sie Ihre Logik ändern (ich denke nicht, dass die Verwendung von DisplayMemberPath für benutzerdefinierte Logik außerhalb der Ansicht eine gute Idee ist). –

+0

es funktioniert wie eine Bombe. danke für deinen Rat. Das werde ich mir merken :) – user235973457

Verwandte Themen