c#不能同时设置DisplayMemberPath和ItemTemplate
本文关键字:DisplayMemberPath ItemTemplate 设置 不能 | 更新日期: 2023-09-27 18:27:59
我想在listboxItem中添加工具提示,但当有DisplayMemberPath
时就会出现问题。错误信息显示:
不能同时设置DisplayMemberPath和ItemTemplate。
当我删除DisplayMemberPath
时,每个列表项中的工具提示都在工作。但是我不想删除DisplayMememberPath
,因为我需要它。如何解决这个问题?
<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>
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
的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
可以阻止数据模板中的任何复杂绑定。