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>

c#不能同时设置DisplayMemberPath和ItemTemplate

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路径并使用DataTemplateBinding:中的值

<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可以阻止数据模板中的任何复杂绑定。

相关文章:
  • 没有找到相关文章