WPF 標準コントロールデモアプリ › ToolTip
ToolTip Overlays
ToolTip は、ポインターが要素の上にとどまったとき、または要素にキーボードフォーカスが来たときに表示されます。時間と位置は ToolTipService の添付プロパティで設定します。
ツールチップが開くときと閉じるとき
要素に ToolTip="文字" を設定するだけで表示されます。WPF は開くときに文字列を ToolTip で包みますが、その都度包みます。同じ文字列のツールチップを 2 回開くと、別々の 2 つの ToolTip のインスタンスになりました。
時間は ToolTipService の添付プロパティで設定し、既定値はよく書かれている数値とは違います。開くまでの待ち時間の InitialShowDelay は 1000 ms でした。ツールチップが閉じたあと、次のツールチップが最初の待ち時間なしに開く時間の BetweenShowDelay は 100 ms でした。ShowDuration は Int32.MaxValue で、ポインターがとどまっている間、ツールチップは自分では閉じません。ShowDuration="1000" では、ポインターをボタンに乗せたままでも、開いて 2.5 秒後には閉じていました。
実際のマウスで試すと、InitialShowDelay 500 のツールチップは回によって約 550〜700 ms 後(下の表の回では 600 ms 後)、2000 では約 2050 ms 後に開きました。
キーボードフォーカスと無効な要素
キーボードの利用者にもツールチップは表示されます。マウスポインターを別のボタンの上に置いたまま、実際の Tab キーでボタンにフォーカスを移すと、ShowsToolTipOnKeyboardFocus が未設定(既定値の null)か True ではツールチップが開き、False では開きませんでした。有効のままにしておきます。
無効な要素では、ShowOnDisabled が True でない限り表示されません。無効なボタンの上ではツールチップは開かず、ShowOnDisabled="True" では約 350 ms 後に開きました(この計測のボタンは、待ち時間を短くするため InitialShowDelay を 300 にしていました)。無効な理由をツールチップで伝えるなら設定します。
表示される位置
Placement の既定値は Mouse で、ツールチップの左上がポインターの 17 下に来ました。Bottom では、ポインターの位置にかかわらず、ボタンの左下の角(ボタンの上端から 30 下)に来たので、ポインターに左右されない位置にするなら Bottom を使います。HorizontalOffset と VerticalOffset で位置をずらせ、HorizontalOffset 50 では、ツールチップはボタンの角から見て (0, 30) から (50, 30) へ移りました。
PlacementTarget と PlacementRectangle は、位置の基準にする要素と矩形です。Popup のページで、同じプロパティを Popup について実測しています。
ボタンで読んだ添付プロパティ HasDropShadow の既定値は False でした。実際に影が描かれるかは計測していません。
| 条件 | 計測値 |
|---|---|
| 既定値: InitialShowDelay / ShowDuration / BetweenShowDelay | 1000 / 2147483647 / 100 |
| 既定値: Placement / ShowsToolTipOnKeyboardFocus / ShowOnDisabled / HasDropShadow | Mouse / null / False / False |
| 実際のマウスをボタンに乗せる: InitialShowDelay 500 / 2000 | 600 ms 後に開いた / 2050 ms 後に開いた |
| ShowDuration=1000、ポインターをボタンに乗せたまま: 2.5 秒後に開いているか | False |
| 文字列の ToolTip を 2 回開く: 同じ ToolTip のインスタンスか | False |
| 無効なボタン: ShowOnDisabled False / True | 開かなかった / 350 ms 後に開いた |
| Placement=Bottom: ボタンの左上から見たツールチップの位置 / ポインターから見た位置 | (0, 30) / (-80, 15) |
| Bottom、HorizontalOffset 50: ボタンの左上から見たツールチップの位置 / ポインターから見た位置 | (50, 30) / (-30, 15) |
| Placement=Mouse(既定値): ボタンの左上から見たツールチップの位置 / ポインターから見た位置 | (80, 32) / (0, 17) |
| 実際に Tab(マウスはもう一方のボタンの上)、OnKeyboardFocus=True: フォーカス / マウスが上にあるか / 開いたか | True / False / True |
| 実際に Tab(マウスはもう一方のボタンの上)、OnKeyboardFocus=False: フォーカス / マウスが上にあるか / 開いたか | True / False / False |
| 実際に Tab(マウスはもう一方のボタンの上)、OnKeyboardFocus=null: フォーカス / マウスが上にあるか / 開いたか | True / False / True |
既定値、時間、再利用、無効な要素、位置、キーボードフォーカス。.NET 10 / Windows 11 で計測。
デモアプリで試す

デモアプリの ToolTip のページには、Placement の 11 個の値それぞれのボタンを並べた位置の欄、Placement="Bottom" のボタンにスライダーから設定するずらし量の欄、基準の要素と矩形の欄があります。ほかに、キーボード(True と False)、チェックボックスで切り替える影、スライダーが 500(InitialShowDelay)・5000(ShowDuration)・2000(BetweenShowDelay)から始まる 3 つの時間、ツールチップの幅・高さ・色・枠・余白・内容の配置の欄があります。各欄の下の「Show Code」リンクで、その欄の XAML を表示できます。次の XAML は、InitialShowDelay の欄(ToolTipUsageControl.xaml)から、スタイルと周囲の GroupBox を省き、名前空間の宣言を加えたものです。
<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Slider x:Name="ValueInitialShowDelaySlider" Maximum="5000" Minimum="0" Value="500" />
<Button x:Name="InitialShowDelayToolTipButton"
Content="Show ToolTip on hover."
ToolTip="Delayed ToolTip"
ToolTipService.InitialShowDelay="{Binding Value, ElementName=ValueInitialShowDelaySlider}" />
</StackPanel>
関連するコントロールと記事
ソースコードと計測の方法
このページの挙動の記述は、すべて .NET 10 / Windows 11 で実際に動かして確かめたものです。計測には、このサイトのスクリーンショット生成ツールの ToolTipDemoScene を使いました。ツールチップは、計測用のウィンドウのボタンの上に実際のマウスを置いて開き、Tab は実際のキーボード入力として押しました。時間は、ツールがカーソルをボタンの上へ動かした時点から、ツールチップが開いたのを確かめるまでで、約 10 ms ごとに確かめ、50 ms 単位に丸めています。位置はデバイスに依存しないピクセルで表しています。どちらも計測したマシンでの値です。