如何将ListViewItem的ToolTip绑定到其ContentTemplate内的TextBlock工具提示

时间:2014-02-24 14:53:13

标签: wpf binding contenttemplate

我想将ListViewItem的ToolTip绑定到其ContentTemplate的TextBlock的工具提示。

我尝试了以下但是它没有用:

<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的工具提示的原因。

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

你的代码工作得很好......好吧,我不得不改变一些Binding来使它工作,但主要的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>

enter image description here

然而,我注意到的一件事是,只有当你将光标直接放在TextBlock没有伸展到{{1}的宽度时,它才有效。 }。要解决此问题,只需将ListViewItem属性设置为HorizontalContentAlignment

即可
Stretch

更新&gt;&gt;&gt;

你说得对...... <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

现在你应该看到2个工具提示,一个在<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> 之上,一个在TextBlock之上。


更新2&gt;&gt;&gt;

@Ron,我真的不明白你为什么对我的答案采取如此消极的反应......你真的应该注意你的态度,因为我正在尝试帮助你,我觉得我不配你的坏态度。所以,要解决你的第二个,甚至更糟的评论:

  
      
  1. 我说FlatAlignment默认设置为Stretch
  2.   

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

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

没有人这么说,但是您确实说过工具提示的价值是动态生成的 ...所以我只能想象您{em>动态生成的 {em> Strecth如果就是这样,那么您只需将Binding的数据ToolTipBind属性相同。


更新3&gt;&gt;&gt;

回应你的上一次评论:

  

我从一开始就坚持我的问​​题,因为我无法解释这个问题。虽然我不知道实际的方法,但我知道解决方案是什么。我想绑定到ListViewItem.ToolTip的{​​{1}}属性。

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