3

我正在尝试绑定 ListBoxItem 的工具提示。我在我的 ControlTemplate 中定义了这个:

<ControlTemplate TargetType="{x:Type ListBoxItem}">
    <ControlTemplate.Resources>
        <conv:IconConverter x:Key="IconConverter" />
        <conv:FirstImageConverter x:Key="FirstImageConverter"/>
        <conv:DebugConverter x:Key="dbg"/>
    </ControlTemplate.Resources>
<Border ...>
    <StackPanel>
        <Image MaxHeight="160" Stretch="UniformToFill" Source="{Binding Icon,Converter={StaticResource IconConverter},ConverterParameter=128}" Height="128"/>
        <TextBlock x:Name="lblName" Text="{Binding Name}" />
    </StackPanel>
    <Border.ToolTip>
        <DockPanel LastChildFill="True" Margin="2" MaxWidth="800" 
        DataContext="{Binding Images,Converter={StaticResource FirstImageConverter}}" 
        IsEnabled="{Binding Images,Converter={StaticResource FirstImageConverter},ConverterParameter=enabled}">
            <TextBlock DockPanel.Dock="Bottom" Width="Auto" MaxWidth="600"  Text="{Binding Caption}" Height="Auto" />
            <Image x:Name="imgFullSize" DockPanel.Dock="Top" Stretch="None" Width="Auto" Source="{Binding Filename,Converter={StaticResource IconConverter}}"/>
        </DockPanel>
    </Border.ToolTip>

是的,我收到一个绑定错误:System.Windows.Data Error: 3 : Cannot find element that provides DataContext. BindingExpression:Path=Images; DataItem=null; target element is 'DockPanel' (Name=''); target property is 'DataContext' (type 'Object')

我的 ListBoxItem 的 datacontext 确实包含 images 属性,因为它包含正确显示的 name 和 icon 属性。我也尝试过使用TooltipService.ToolTip而不是Border.ToolTip,但没有效果。有什么区别,为什么我的绑定不起作用?

4

1 回答 1

8

最终通过将工具提示更改为此解决了这个问题:

...
<Border.ToolTip>
    <ToolTip DataContext="{Binding PlacementTarget.DataContext.Images, RelativeSource={RelativeSource Self}}" Visibility="{Binding PlacementTarget.DataContext.Images, RelativeSource={RelativeSource Self},Converter={StaticResource FirstImageConverter},ConverterParameter=visible}">
        <DockPanel LastChildFill="True" Margin="2" MaxWidth="800">
            ...

感谢@Rachel 引导我找到答案。

于 2013-04-23T14:08:07.347 回答