これに似ていますが、より複雑です。
このコントロールに関する追加情報を使用して、すべてのツールチップ (およびツールチップを持つことができるが現在は持たないすべてのコントロール) をオーバーライドする必要があります。のようなものを入れたかった
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();
}
ほとんど動作しますが、:
- ツールチップが定義されていないコンポーネントの場合、ツールチップは表示されません
- ツールチップが定義されたコンポーネントの場合、各 show tooltip イベントに値を追加します
- e は既に定義されているため、(s, e) の名前を (s, e2) に変更する必要がありました
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();
}));
ツールチップなしでコンポーネントをオーバーライドする方法がまだわかりません - おそらく、すべてのボタンと他のタイプのコントロールに "" ツールチップを割り当てて、構成されているものを更新することができますか?
ありがとう