0

我想将我的 ListViewItem 的 ToolTip 绑定到它的 ContentTemplate 的 TextBlock 的 ToolTip。

我尝试了以下但没有奏效:

<ListView ItemsSource="{Binding DoestMatter}" >
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="ToolTip" Value="{Binding ElementName=Title, Path=ToolTip}"/>
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock x:Name="Title" Text="{Binding Title}" ToolTip="Test"/>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

ToolTip 的值是动态生成的,这里我只是将它显示为静态字符串,但实际上它不是,这就是我需要将它绑定到 TextBlock 的 ToolTip 的原因。

我怎样才能让它工作?

4

1 回答 1

1

您的代码可以正常工作...好吧,我必须更改一些Bindings 才能使其正常工作,但是主要的 XAML 很好:

<ListView ItemsSource="{Binding Tests}" >
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="ToolTip" Value="{Binding ToolTip, ElementName=Title}" />
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock x:Name="Title" Text="{Binding Name}" 
                            ToolTip="Test" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

在此处输入图像描述

但是,我确实注意到的一件事是,它仅在您将光标直接放在 上时才有效,并且TextBlock不会延伸到. 要解决这个问题,只需将属性设置为:ListViewItemHorizontalContentAlignmentStretch

<ListView ItemsSource="{Binding Tests}" >
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="ToolTip" Value="{Binding ToolTip, ElementName=Title}" />
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock x:Name="Title" Text="{Binding Name}" 
                            ToolTip="Test" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

更新>>>

你是对的......ToolTip仍然在TextBlock。然后,您只需将您的值更新ToolTip.Binding为与该Text属性相同的值:

<ListView ItemsSource="{Binding Tests}" >
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="ToolTip" Value="{Binding ToolTip}" />
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock x:Name="Title" Text="{Binding Title}" 
                            ToolTip="{Binding ToolTip}" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

现在您应该看到 2 个工具提示,一个在结束时,TextBlock一个在结束时ListViewItem


更新 2 >>>

@Ron,我真的不明白你为什么对我的回答做出如此消极的反应......你真的应该注意你的态度,因为我正在努力帮助你,我觉得我不应该得到你的坏态度. 因此,为了解决您的第二个甚至更粗鲁的评论:

  1. 我说Horizo​​ntalAlignment默认设置为Stretch

真的吗?你在哪里说的?事实上,你没有这么说,你说ListViewItem 在 default 上延伸,这是完全不同的东西。正如评论中提到的,我正在使用属性拉伸TextBlock内部,默认情况下ListViewItemHorizontalContentAlignment属性设置为Strecth

  1. 谁说我想要标题作为我的工具提示?

没有人这么说,但你确实说过ToolTip 的值是动态生成的……所以我只能想象你是Binding动态生成 ToolTip的。如果是这样,那么您也可以简单地Bind将相同的值数据传输到ListViewItem.ToolTip属性中。


更新 3 >>>

回应您的最后评论:

我从一开始就坚持我的问​​题,因为我无法真正解释这个问题。尽管我不知道实际的方法,但我知道解决方案是什么。我想绑定到TextBlockToolTip属性。

很抱歉,但你不能在 XAML 中这样做,因为TextBlockDataTemplate. 您只能DataTemplate在代码中访问生成的元素,因为它们直到运行时才存在......请参阅 MSDN 上的How to: Find DataTemplate-Generated Elements页面以了解如何执行此操作。所以你必须找到另一种方法来实现你的目标,这就是为什么我一直在建议这些其他方法。

于 2014-02-24T16:05:50.230 回答