1

これに似ていますが、より複雑です。

このコントロールに関する追加情報を使用して、すべてのツールチップ (およびツールチップを持つことができるが現在は持たないすべてのコントロール) をオーバーライドする必要があります。のようなものを入れたかった

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();
        }));

ツールチップなしでコンポーネントをオーバーライドする方法がまだわかりません - おそらく、すべてのボタンと他のタイプのコントロールに "" ツールチップを割り当てて、構成されているものを更新することができますか?

ありがとう

4

1 に答える 1

2

チェスク!

これを行うには、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> 
}
于 2012-12-21T12:47:08.137 に答える