如何通过XAML设置LISTBOX的工具提示

3

我在WPF中有一个列表框,如下所示

<ListBox Name="lstName" DisplayMemberPath ="ListName" ToolTip="{Binding Path=ListName}" />

我的要求是,无论我在列表框中显示什么项,都应该出现在工具提示中。也就是说,如果这些项是“项目1”、“项目2”等,则当用户通过鼠标指向“项目1”时,工具提示应该显示“项目1”。其他项也是如此。
因此,我的DisplayMemberPath设置为我应该显示的属性(它已经正确显示)。然而,工具提示根本没有出现。
实体如下:
public class ItemList
{
  public string ListName { get; set; }
}

绑定操作的步骤如下:
this.lstName.ItemsSource = GetData(); // Assume that the data is coming properly

你检查过VS的输出吗?因为绑定没有抛出任何异常信息,所以关于绑定的信息也不在那里。 - Lukasz Madon
实际上,没有显示任何工具提示。 - user372724
请不要在标题中添加像“(WPF, C#)”这样的内容,这就是标签的作用。 - John Saunders
我会在下次发布问题时注意这一点。谢谢你的信息。 - user372724
1个回答

9

不要在ListBox上设置ToolTip属性,而是通过应用样式将其设置在ListBoxItems上:

<ListBox Name="lstName" DisplayMemberPath="ListName">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="ToolTip" Value="{Binding ListName}"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

这样,每个ListBoxItem都将有自己的工具提示,显示该项的值。

由于您直接在ListBox上设置了ItemsSource,可能没有设置DataContext,因此绑定在那里不起作用。如果您将DataContext设置为列表,则无论鼠标在ListBox上的哪个位置,该绑定都将显示当前选定的项作为工具提示。


@priyanka:我更新了我的答案并加入了更多的解释。它回答了你的问题吗?你在ListBox上设置了一个工具提示,所以它是相对于ListBox的DataContext进行绑定的,我猜想这个DataContext是空的。将其设置在ListBoxItem上将会相对于ListBoxItem的DataContext进行绑定,这将是来自ItemsSource列表的项目。 - Quartermeister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接