【发布时间】:2010-12-02 15:37:00
【问题描述】:
我有一种用于在某些文本框上制作动态工具提示的样式。
<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>
这很好用,但如果我想使用更复杂的工具提示,我不知道如何为转换器值绑定到“标签”。例如;
...
<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”的风格,但对于相对来源,我什么也做不了。有什么想法吗??
更新:2010 年 12 月 29 日:这是正确的代码,下面是我们的朋友 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>
...
【问题讨论】:
-
更新:无论我将值绑定设置为什么,似乎都没有在这种安排中调用转换器。但是,应用程序在运行时不会报告异常。这只会增加谜团。
-
不是真的 - 这是因为 TextBlock 的 DataContext 为空 - 因此绑定在设置 DataContext 之前处于“休眠”状态。