c# - 是否可以在控件内显示所有可用的工具提示?
问题描述
对于 WPF 应用程序的文档,我需要激活所有可用工具提示的屏幕截图。
我尝试将应用程序的屏幕截图与在每个图像上激活的一个工具提示结合起来,但我不是 PS/Gimp 专家,它需要组合很多图像。
解决方案
根据这个答案,您可以遍历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;
}
}
推荐阅读
- azure-devops - 在发布阶段访问“工作项差异”
- javascript - 'this'对象在带有参数的回调中未定义,在jquery中
- flutter - 如何从flutter中的联系人中选择单个联系人
- google-apps-script - 使用应用脚本更改模板幻灯片的颜色
- r - SomersDelta:as.table.default(x) 中的错误:无法强制转换为 R 中的表格
- database - 迁移时node.js sequelize没有主键
- ecmascript-6 - takeLatest$1 需要一个 saga 参数
- hyperledger-fabric - 如何规范区块链存储?
- angular - 使用 ESC 键清除 Angular2 中的输入文本字段
- angular - 缺少导入错误:StaticInjectorError(AppModule)[ClrVerticalNavGroup -> VerticalNavGroupRegistrationService]: