与此类似,但更复杂。
我需要使用有关此控件的其他信息来覆盖所有工具提示(以及所有可以拥有但现在没有的控件)。我想放一些类似的东西
sender.ToolTip =+ "\n\r" + sender.Name + "(" + sender.Tag + ")";
但谷歌了一下,没有成功。
更新
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();
}
几乎可以工作,但是:
- 对于没有定义工具提示的组件,没有可见的工具提示
- 对于定义了工具提示的组件,它会在每个显示工具提示事件上增加价值
- 我不得不将 (s, e) 重命名为 (s, e2) 因为 e 已经定义
更新消除了空异常并防止重复条目
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();
}));
仍然不知道如何在没有工具提示的情况下覆盖组件-也许我可以将“”工具提示分配给所有按钮和其他类型的控件,而不是更新已配置的控件?
谢谢