wpf工具提示在应用程序中添加其他字符串

时间:2012-12-21 12:20:25

标签: wpf tooltip

this类似,但更复杂。

我需要覆盖所有工具提示(以及所有可以拥有一个但现在没有它的控件)以及有关此控件的其他信息。我想写点什么

sender.ToolTip =+ "\n\r" + sender.Name + "(" + sender.Tag + ")";

但是搜索了一下但没有成功。

<小时/> UPDATE

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        EventManager.RegisterClassHandler(typeof(FrameworkElement), FrameworkElement.ToolTipOpeningEvent, new RoutedEventHandler((s, e2) =>
        {
            var fe = s as FrameworkElement;
            fe.ToolTip = fe.ToolTip + "\n\r(" + fe.Name + ")";
            //fe.Name + " " + fe.Tag;
        }));

        new MainWindow();
    }

几乎有效,但是:

  • 对于未定义工具提示的组件,没有可见的工具提示
  • 对于定义了工具提示的组件,它会在每个show tooltip事件中添加值
  • 我必须将(s,e)重命名为(s,e2),因为e已经定义

<小时/> 已更新,已消除null异常并受到重复条目的保护

            EventManager.RegisterClassHandler(typeof(FrameworkElement), FrameworkElement.ToolTipOpeningEvent, new RoutedEventHandler((s, e2) =>
        {
            var fe = (FrameworkElement)s;

            //skip already updated tooltips
            if (fe.ToolTip.ToString().Contains(fe.Name)) return;

            //update tooltip value
            fe.ToolTip = (fe.ToolTip + Environment.NewLine + "(" + ( fe.Tag != null 
                ? string.Join(": ", fe.Name, fe.Tag) 
                : fe.Name
            ) +  ")").Trim();
        }));

仍然不知道如何在没有工具提示的情况下覆盖组件 - 也许我可以向所有按钮和其他类型的控件提供工具提示,而不是更新那些已配置的控件?

感谢

1 个答案:

答案 0 :(得分:2)

Czesc!

您可以使用WPF中提供的路由事件基础结构来执行此操作。

像这样调用EventManager.RegisterClassHandler方法:

EventManager.RegisterClassHandler(typeof(FrameworkElement), FrameworkElement.ToolTipOpeningEvent, new RoutedEventHandler((s, e) =>
            {
                var fe = s as FrameworkElement;
                fe.ToolTip = fe.Name + " " + fe.Tag;                
            }));

您可以在构造函数下将此代码添加到App.xaml.cs:

protected override void OnStartup(StartupEventArgs e) 
{ 
    base.OnStartup(e); 
    <code goes here> 
}