【WPF】ツールチップの表示時間を長くする方法

C#

ToolTipは、詳細説明やヒントを表示するのに便利ですが、
あまり長い文章を書くと表示時間の短さがネックになります。

開発者からすると親切のつもりで、
ついつい長い補足説明を書いてしまいがちですが、
何も知らない人はじっくり読もうとしてしまうので、
途中で表示が消えてしまうとストレスが溜まります。

実際に長いToolTIpが表示される様子を見てみると、
以下のようになります。

どうでしょうか?
読み終わらなくてイライラしませんでしたか?

このイライラをアプリ利用者にさせないための
方針は大きく分けて2つあります。

  • そもそも長いToolTipを書かない
  • ToolTipの表示時間を延ばす

本記事では、
ToolTipService.ShowDurationプロパティを利用して
ToolTipの表示時間を延ばす方法を解説します。

スポンサーリンク

ToolTipService.ShowDurationを設定して表示時間を延ばす

ToolTipService.ShowDurationプロパティは、
ToolTipの表示時間を設定できる、添付プロパティです。
DockPanel.DockやGrid.Columnなどと一緒ですね。

このプロパティを、
表示時間を延ばしたいコントロールに
設定することで任意の時間表示させっぱなしにすることができます。
(単位はミリ秒です)

コード例です。

        <Button Content="長いToolTipが出てくるボタン"
                ToolTip="ToolTipは補足説明などを書くのに便利ですが
このように非常に長い文章を記述してしまうと
読み終わる前に途中で表示が消えてしまいます

特に一息で読みきれない文章は
読む側もまさか消えるとは思わずゆっくり読むため、
途中で表示が消えると余計にストレスをためてしまうのです。"
                ToolTipService.ShowDuration="10000000"/>

桁が多すぎてよくわかりませんが、
10000000ミリ秒=10000秒=2時間46分40秒表示したあと、
ToolTipが消えるようになります。

さんさめ
さんさめ

明らかなオーバーキル

2時間強もマウスの動きを止めてじっくり
ToolTipの文章を読む人はいないと思うので、
これはもう実質無限ですね。

ToolTipちょっと長いかな?
という場合にToolTipService.ShowDurationを
設定するだけでも、
非常に効果的なので、どんどこ設定しましょう。

個別対処が面倒な人向け。アプリ全体に一括で設定する方法

いやもう全部これでいいよ!
個別対処は面倒くさい!

そんな方向けに、いい方法があります。

App.xaml.csに以下のように、
初期値を上書きしてしまうコードを足してしまえば、
全てのToolTipの表示時間が実質無限になります。

    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            System.Windows.Controls.ToolTipService.ShowDurationProperty.OverrideMetadata(
                typeof(DependencyObject),
                new FrameworkPropertyMetadata(int.MaxValue));
        }
    }

int.MaxValue= 2147483647なので、
約24日間は表示しつづけられますね。

xaml上だとint.MaxValueを手短に書く方法が無いので、
適当に桁数を増やしましたが、
C#コードでは明確な最大値を記述できます。

だから何だって話ですが。

まとめ

まとめです。

  • ToolTipに長い文章を書くときは読みきれるかにも注意
  • ToolTipService.ShowDurationを設定することで
    表示時間を任意の値に変更可能
  • OverrideMetaDataで初期値を上書きすれば、
    全てのToolTipに一括で反映

最後までお読みいただき、ありがとうございました。

コメント

タイトルとURLをコピーしました