我使用的样式用于在某些文本框上制作动态工具提示。
<Style TargetType="{x:Type TextBox}">
<Setter Property="MinWidth" Value="100"/>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<!-- item of interest -->
<Setter Property="ToolTip">
<Setter.Value>
<MultiBinding Converter="{StaticResource ErrorMessageConverter}">
<Binding RelativeSource="{RelativeSource Self}" Path="Tag"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
这非常有效,但如果我想使用更复杂的工具提示,我无法弄清楚如何为转换器值绑定到'Tag'。例如;
...
<Setter Property="ToolTip">
<Setter.Value>
<StackPanel>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource ErrorMessageConverter}">
<!-- item of interest -->
<Binding RelativeSource=" what goes here?? "/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<Image/>
</StackPanel>
</Setter.Value>
</Setter>
...
我尝试过几种“FindAncestor”,而不是相关来源,但我无法解决任何问题。任何想法??
更新:12-29-2010:这是正确的代码,答案由我们的朋友Goblin提供。效果很好!
...
<Setter Property="ToolTip">
<Setter.Value>
<!-- Item of interest -->
<ToolTip DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}">
<StackPanel>
<Image/>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource ErrorMessageConverter}">
<Binding Path="Tag"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</ToolTip>
</Setter.Value>
</Setter>
...
答案 0 :(得分:3)
有关如何从工具提示继承“拥有”控件的DataContext的完整说明,请参阅Karl Shifflett:http://karlshifflett.wordpress.com/2007/12/29/wpf-sample-series-data-binding-in-tooltip/
这不完全是教科书的东西:)
答案 1 :(得分:2)
问题是ToolTips是主视觉树之外的弹出窗口,当查找ToolTip之外的元素时,会导致RelativeSource和ElementName中断。最简单的方法是使用继承的DataContext作为Bindings,因为它传递给ToolTip,但这并不总能提供对所需内容的访问。
另一种方法是使用FrameworkMetadataOptions.Inherits声明的自定义附加属性。然后,您可以在所有者对象上设置该属性的值(在本例中为TextBox),然后在ToolTip内的任何元素上访问继承的值。在这种情况下,您可以设置Attached Property值而不是Tag。
答案 2 :(得分:0)
尝试使用工具提示在控件上使用x:Name
,然后使用<Binding ElementName="yourName" Path="Tag">
进行绑定。