如何在WPF中的代码后端显示工具提示信息

6
我该如何在代码后端显示工具提示?下面的代码更好地定义了我的问题。显然,我不想让代码检查鼠标位置等问题,只是想知道如何显示工具提示。
private void UIElement_OnMouseMove(object sender, MouseEventArgs e)
{
    // if mouse position equals certain coordinates show the tooltip
}
1个回答

19

试试这样:

if (control.ToolTip != null)
{
    // Main condition
    if (control.ToolTip is ToolTip)
    {
        var castToolTip = (ToolTip)control.ToolTip;
        castToolTip.IsOpen = true;
    }
    else
    {
        toolTip.Content = control.ToolTip;
        toolTip.StaysOpen = false;
        toolTip.IsOpen = true;
    }
}  

Main condition 是必需的,因为 ToolTip 可以通过两种方式设置控件:

第一种方法

<Button Name="TestButton"
        ToolTip="TestToolTip" />

这种方法是最常见的。在这种情况下,工具提示的内容将是对象,而不是 ToolTip 类型。

第二种方法

<Button Name="TestButton"
        Content="Test">

    <Button.ToolTip>
        <ToolTip>TestToolTip</ToolTip>
    </Button.ToolTip>
</Button>

与此相同:

<Button Name="TestButton"
        Content="Test">

    <Button.ToolTip>
        TestToolTip
    </Button.ToolTip>
</Button> 
在这种情况下,ToolTip的内容类型将为Tooltip。请注意,在第二种情况下,对象会自动填充第TestToolTip行的ToolTip对象,因此这种方法的工作速度会稍慢一些。
因此,需要进行此检查以避免在尝试将内容分配给ToolTip的ToolTip类型时出现异常:
toolTip.Content = control.ToolTip;

以下是一个完整的示例:

XAML

<Grid>
    <Button Name="TestButton"
            Width="100"
            Height="25"
            Content="Test" 
            ToolTip="TestToolTip" />

    <Button Name="ShowToolTip" 
            VerticalAlignment="Top"
            Content="ShowToolTip" 
            Click="ShowToolTip_Click" />
</Grid>

代码后置

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void ShowToolTip_Click(object sender, RoutedEventArgs e)
    {
        var toolTip = new ToolTip();

        if (TestButton.ToolTip != null)
        {
            if (TestButton.ToolTip is ToolTip)
            {
                var castToolTip = (ToolTip)TestButton.ToolTip;
                castToolTip.IsOpen = true;
            }
            else
            {
                toolTip.Content = TestButton.ToolTip;
                toolTip.StaysOpen = false;
                toolTip.IsOpen = true;
            }
        }  
    }
}

抱歉,但这会导致空引用异常。 - Vahid
谢谢,它对按钮起作用,但对于Canvas上的MouseMove事件不起作用。 - Vahid
@Vahid:具体是什么不起作用?请展示一个完整的不起作用的例子。 - Anatoliy Nikolaev
正如我在问题中所提到的,我想在鼠标移动到画布并达到一定点时显示工具提示。但是你给我的信息足以完成剩下的旅程。谢谢。 - Vahid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接