【问题标题】:WPF Tooltip binding and open programatically does not workWPF 工具提示绑定和以编程方式打开不起作用
【发布时间】:2016-03-03 20:22:02
【问题描述】:

我有一个自定义工具提示图标,它的内容也绑定到 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;
}

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

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

【问题讨论】:

    标签: wpf data-binding tooltip


    【解决方案1】:

    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>
    

    【讨论】:

    • 这对我不起作用。还尝试了 Image 的 Tag="{Binding Tips}" 和 Texblock 的 Text="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ToolTip}}}"
    • 跟AncestorLevel也有关系吗?
    • 您是否也将图像的标签属性复制到您的解决方案中?我在 VS 中试过这段代码,效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2023-03-28
    • 1970-01-01
    • 2018-05-12
    • 2016-10-24
    相关资源
    最近更新 更多