与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();
}
几乎有效,但是:
<小时/> 已更新,已消除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();
}));
仍然不知道如何在没有工具提示的情况下覆盖组件 - 也许我可以向所有按钮和其他类型的控件提供工具提示,而不是更新那些已配置的控件?
感谢
答案 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>
}