WPF工具提示绑定和以编程方式打开不起作用

时间:2016-03-03 20:22:02

标签: wpf data-binding tooltip

我有一个自定义工具提示图标,其内容也绑定到Datacontext。我需要在鼠标悬停和点击事件上打开Tooltop。所以我使用了以下代码

<Image Source="/MainUI;component\Images\home\tooltip_info.png" 
       Width="24" Height="24" Stretch="Fill" HorizontalAlignment="Right" 
       Name="ImageToolTip"
       Margin="0,0,0,0" MouseUp="ImageToolTip_MouseUp" MouseLeave="ImageToolTip_MouseLeave">
    <Image.ToolTip>
        <ToolTip BorderBrush="Transparent" Background="Transparent" HorizontalOffset="-142">
            <TextBlock TextWrapping="WrapWithOverflow" 
                       Style="{StaticResource ExcalFont-MSFD300}" 
                       FontSize="14" Text="{Binding Tips}" 
                       Width="300" Padding="15,15,15,15">
                <TextBlock.Background>
                    <ImageBrush ImageSource="Images\home\popupbox.png" />
                </TextBlock.Background>
            </TextBlock>
        </ToolTip>
    </Image.ToolTip>
</Image>

代码背后:

private void ImageToolTip_MouseUp(object sender, MouseButtonEventArgs e)
{
    ((ToolTip)((FrameworkElement)sender).ToolTip).IsOpen = true;
}

private void ImageToolTip_MouseLeave(object sender, MouseEventArgs e)
{
    ((ToolTip)((FrameworkElement)sender).ToolTip).IsOpen = false;
}

现在问题出现在鼠标上它打开工具提示但它没有绑定文本。 如果我使用静态文本而不是Binding,这工作正常。我做错了什么?

如果我将鼠标悬停在图标上,那么它可以正常工作并显示内容。此后,每次鼠标单击也会显示工具提示内容。不确定为什么鼠标点击最初不起作用。 -

1 个答案:

答案 0 :(得分:0)

ToolTip不是VisualTree的一部分。 这里描述的问题类似于您遇到的问题: RelativeSource binding from a ToolTip or ContextMenu

解决问题的一个选择是:

   <Image Source="/MainUI;component\Images\home\tooltip_info.png" 
   Width="24" Height="24" Stretch="Fill" HorizontalAlignment="Left" 
   Name="ImageToolTip"
   Margin="0,0,0,0" MouseUp="ImageToolTip_MouseUp" MouseLeave="ImageToolTip_MouseLeave" Tag="{Binding DataContext,RelativeSource={RelativeSource Mode=Self}}">
        <Image.ToolTip>
            <ToolTip BorderBrush="Transparent" Background="Transparent" HorizontalOffset="-142" >
                <TextBlock TextWrapping="WrapWithOverflow" 
                   FontSize="14" Text="{Binding PlacementTarget.Tag.Tips, 
        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ToolTip}}"
                   Width="300" Padding="15,15,15,15">
                     <TextBlock.Background>
                        <ImageBrush ImageSource="Images\home\popupbox.png" />
                     </TextBlock.Background>
                </TextBlock>
            </ToolTip>
        </Image.ToolTip>
    </Image>