需求
自己繪制的UI,檢測鼠標位置,適時顯示出 ToolTip
1 WinForm 的 ToolTip
// Member define:
private ToolTip _toolTip = new ToolTip(new Container());
// constructor: initialize
this._toolTip.AutoPopDelay = 100;
this._toolTip.ShowAlways = true;
// MouseMove Event: logic-process
// On some condition:
this._toolTip.ToolTipTitle = "Title Of ToolTip";
this._toolTip.SetToolTip("Content String Here!");
一個ShowAlways屬性就可以了。
邏輯就放在MouseMove中實時判斷,
符合條件就調用最后那兩句。
(當然,按需改成動態數據)
2 WPF 的 ToolTip
檢索了一圈沒有特別好的解決辦法,總是出現問題
-
在對象控件的MouseMove事件中設置ToolTip的位置
How make a tooltip follow the mousepointer
在首次顯示關閉前一直活動鼠標的話位置顯示倒是沒有問題,
但不活動直到顯示完【首次顯示】就會關閉,設IsOpen=True
會出現位置不對的情況 -
另一種方案就是不用 ToolTip,改用 Popup
How can I display a tooltip constantly while a control is focused?
那樣的話需要單獨設一些樣式。
還是用回ToolTip
再嘗試解決一下。相信多試試辦法總會有的。
XAML文件:
<Canvas ToolTipService.ShowDuration="0" ToolTipService.InitialShowDelay="0" ToolTipService.BetweenShowDelay="0" MouseMove="MainCanvas_MouseMove">
<Canvas.ToolTip>
<ToolTip x:Name="tip" PlacementTarget="{Binding ElementName=MainCanvas}" Content="A tooltip!" Visibility="Collapsed"></ToolTip>
</Canvas.ToolTip>
</Canvas>
ToolTipService.ShowDuration="0"
讓首次顯示時長為0
,就解決了這個問題。
配合手動控制ToolTip
的Visibility
屬性。
后台代碼:
// Position:
tip.Placement = System.Windows.Controls.Primitives.PlacementMode.Relative;
tip.HorizontalOffset = e.GetPosition((IInputElement)sender).X + 10;
tip.VerticalOffset = e.GetPosition((IInputElement)sender).Y + 10;
// logic for Show/Hide:
tip.Visibility = showTip ? Visibility.Visible : Visibility.Collapsed;
// Be open constantly while mouse-moving:
tip.IsOpen = true;