9

我想在 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>
4

1 回答 1

22

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>

编辑

如果你想设置 aToolTip但保留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会阻止您在数据模板中进行任何复杂的绑定。

于 2013-08-16T12:36:12.613 回答