c# wpf-не удается установить DisplayMemberPath и ItemTemplate
Я хочу добавить подсказку в listboxItem, но она начинает проблему, когда есть DisplayMemberPath. Сообщение об ошибке: не удается установить DisplayMemberPath и ItemTemplate. Когда я удалил DisplayMemberPath, всплывающая подсказка в каждом элементе списка работает. Но я не хочу удалять DisplayMemember, потому что мне это нужно. Как решить эту проблему?
<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>
1 ответов
DisplayMemberPath
является, по сути, шаблоном для одного свойства, показанного в TextBlock
. Если вы установили:
<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}"
ItemsSource="{Binding Strings}" DisplayMemberPath="Toys">
</ListBox>
это эквивалентно:
<ListBox x:Name="lstToys" Style="{DynamicResource ListBoxStyle1}"
ItemsSource="{Binding Strings}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Toys}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
вы можете просто удалить DisplayMemberPath
путь и использовать значение в вашей DataTemplate
' 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>
редактировать
если вы хотите установить ToolTip
но сохранить DisplayMemberPath
, вы можете сделать это на 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>
Я бы не советовал. Помните, что использовать DisplayMemberPath
останавливает вас от любой сложной привязки в вашем шаблоне данных.