首页 > 解决方案 > 是否可以在控件内显示所有可用的工具提示?

问题描述

对于 WPF 应用程序的文档,我需要激活所有可用工具提示的屏幕截图。

我尝试将应用程序的屏幕截图与在每个图像上激活的一个工具提示结合起来,但我不是 PS/Gimp 专家,它需要组合很多图像。

标签: c#wpftooltip

解决方案


根据这个答案,您可以遍历FrameworkElement应用程序中所有类型的子项以激活他们的工具提示(如果有)。

要激活工具提示,您可以使用此答案

最后,您可以在应用程序中添加一个显示所有工具提示按钮,后面的代码将如下所示:

private void DisplayAllToolTips_OnClick(object sender, RoutedEventArgs e)
{
    foreach (var element in FindVisualChildren<FrameworkElement>(this))
    {
        if (element.ToolTip == null)
            continue;

        var toolTip = element.ToolTip as ToolTip ??
                      new ToolTip {Content = element.ToolTip};

        element.ToolTip = toolTip;

        toolTip.PlacementTarget = element;
        toolTip.Placement = PlacementMode.Relative;
        toolTip.HorizontalOffset = 6;
        toolTip.VerticalOffset = -6;
        toolTip.Opacity = 0.8;

        toolTip.IsOpen = true;
    }
}

private static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
    if (depObj == null)
        yield break;

    for (var i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
    {
        var child = VisualTreeHelper.GetChild(depObj, i);
        if (child is T t)
            yield return t;

        foreach (var childOfChild in FindVisualChildren<T>(child))
            yield return childOfChild;
    }
}

推荐阅读