我想将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的工具提示的原因。
我怎样才能让它发挥作用?
答案 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>
然而,我注意到的一件事是,只有当你将光标直接放在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;
- 我说FlatAlignment默认设置为Stretch
醇>
真的?你在哪里说的?事实上,你没有这么说,你说 ListViewItem在默认情况下延伸,这是完全不同的东西。正如评论中所提到的,我正在使用ListViewItem
属性扩展TextBlock
内的ListViewItem
,其中未设置为HorizontalContentAlignment
默认值。
- 谁说我想把标题作为我的工具提示?
醇>
没有人这么说,但是您确实说过工具提示的价值是动态生成的 ...所以我只能想象您{em>动态生成的 {em> Strecth
。 如果就是这样,那么您只需将Binding
的数据ToolTip
与Bind
属性相同。
更新3&gt;&gt;&gt;
回应你的上一次评论:
我从一开始就坚持我的问题,因为我无法解释这个问题。虽然我不知道实际的方法,但我知道解决方案是什么。我想绑定到
ListViewItem.ToolTip
的{{1}}属性。
很抱歉,但是你不能在XAML中这样做,因为TextBlock
是在ToolTip
中声明的。您只能访问代码中生成的TextBlock
元素,因为它们不会仅存在于运行时...请参阅MSDN上的How to: Find DataTemplate-Generated Elements页面以了解如何执行此操作。所以你必须找到另一种方法来实现你的目标,这就是为什么我一直在建议这些其他方法。