16 KiB
Tooltip 使用文档
本文档介绍 AtomUI ToolTip 控件的各种使用方式,示例代码摘自 Gallery 演示程序。
📖 Gallery 源码位置:
controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml
前置准备
在 AXAML 中使用 ToolTip,需要引入以下命名空间:
xmlns:atom="https://atomui.net"
在 C# 代码中引入:
using AtomUI.Desktop.Controls; // ToolTip 控件
1. 基本用法
鼠标悬浮时显示简单文字提示。ToolTip 通过附加属性附加到任意控件上,无需嵌套或修改控件模板:
<atom:TextBlock
HorizontalAlignment="Left"
atom:ToolTip.Tip="prompt text">
Tooltip will show on mouse enter.
</atom:TextBlock>
也可以附加到按钮等其他控件上:
<atom:Button atom:ToolTip.Tip="This is a helpful tooltip">
Hover me
</atom:Button>
提示:当
Tip为字符串时,ToolTip 内部自动将其转换为带自动换行的TextBlock(TextWrapping="Wrap"),超过ToolTipMaxWidth(默认 250px)时自动换行。
2. 弹出方向
通过 Placement 附加属性设置 12 种弹出方向。不设置时默认为 Top。
<!-- 上方(默认) -->
<atom:Button atom:ToolTip.Tip="Top" atom:ToolTip.Placement="Top">Top</atom:Button>
<!-- 下方 -->
<atom:Button atom:ToolTip.Tip="Bottom" atom:ToolTip.Placement="Bottom">Bottom</atom:Button>
<!-- 左侧 -->
<atom:Button atom:ToolTip.Tip="Left" atom:ToolTip.Placement="Left">Left</atom:Button>
<!-- 右侧 -->
<atom:Button atom:ToolTip.Tip="Right" atom:ToolTip.Placement="Right">Right</atom:Button>
<!-- 上方左对齐 -->
<atom:Button atom:ToolTip.Tip="TopLeft"
atom:ToolTip.Placement="TopEdgeAlignedLeft">
TopLeft
</atom:Button>
<!-- 上方右对齐 -->
<atom:Button atom:ToolTip.Tip="TopRight"
atom:ToolTip.Placement="TopEdgeAlignedRight">
TopRight
</atom:Button>
完整的 12 方向布局
Gallery 中展示了 12 种方向的完整布局,使用 Grid 排列:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- 左侧列 -->
<atom:Button Grid.Row="1" Grid.Column="0" Content="LT"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="LeftEdgeAlignedTop" />
<atom:Button Grid.Row="2" Grid.Column="0" Content="Left"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="Left" />
<atom:Button Grid.Row="3" Grid.Column="0" Content="LB"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="LeftEdgeAlignedBottom" />
<!-- 顶部行 -->
<atom:Button Grid.Row="0" Grid.Column="1" Content="TL"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="TopEdgeAlignedLeft" />
<atom:Button Grid.Row="0" Grid.Column="2" Content="Top"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="Top" />
<atom:Button Grid.Row="0" Grid.Column="3" Content="TR"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="TopEdgeAlignedRight" />
<!-- 右侧列 -->
<atom:Button Grid.Row="1" Grid.Column="4" Content="RT"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="RightEdgeAlignedTop" />
<atom:Button Grid.Row="2" Grid.Column="4" Content="Right"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="Right" />
<atom:Button Grid.Row="3" Grid.Column="4" Content="RB"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="RightEdgeAlignedBottom" />
<!-- 底部行 -->
<atom:Button Grid.Row="4" Grid.Column="1" Content="BL"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="BottomEdgeAlignedLeft" />
<atom:Button Grid.Row="4" Grid.Column="2" Content="Bottom"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="Bottom" />
<atom:Button Grid.Row="4" Grid.Column="3" Content="BR"
atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="BottomEdgeAlignedRight" />
</Grid>
📖 参考:
controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml中 "Placement" 示例。
3. 箭头控制
ToolTip 支持三种箭头模式:显示、隐藏和居中指向。
显示箭头(默认)
<atom:Button atom:ToolTip.Tip="With arrow"
atom:ToolTip.IsShowArrow="True">
Arrow
</atom:Button>
隐藏箭头
<atom:Button atom:ToolTip.Tip="No arrow"
atom:ToolTip.IsShowArrow="False">
No Arrow
</atom:Button>
箭头指向目标中心
<atom:Button atom:ToolTip.Tip="Point at center"
atom:ToolTip.IsShowArrow="True"
atom:ToolTip.IsPointAtCenter="True"
atom:ToolTip.Placement="TopEdgeAlignedLeft">
Point at Center
</atom:Button>
通过 Segmented 切换箭头模式(Gallery 示例)
Gallery 中提供了通过 Segmented 控件动态切换箭头模式的示例:
<atom:Segmented x:Name="ArrowSegmented">
<atom:SegmentedItem>Show</atom:SegmentedItem>
<atom:SegmentedItem>Hide</atom:SegmentedItem>
<atom:SegmentedItem>Center</atom:SegmentedItem>
</atom:Segmented>
<atom:Button atom:ToolTip.Tip="prompt text"
atom:ToolTip.Placement="Top"
atom:ToolTip.IsShowArrow="{Binding ShowArrow}"
atom:ToolTip.IsPointAtCenter="{Binding IsPointAtCenter}">
Top
</atom:Button>
// ViewModel 处理 Segmented 选中变更
public void HandleSelectionChanged(object? sender, SelectionChangedEventArgs args)
{
if (sender is Segmented segmented)
{
if (segmented.SelectedIndex == 0)
{
ShowArrow = true;
IsPointAtCenter = false;
}
else if (segmented.SelectedIndex == 1)
{
ShowArrow = false;
IsPointAtCenter = false;
}
else if (segmented.SelectedIndex == 2)
{
IsPointAtCenter = true;
ShowArrow = true;
}
}
}
📖 参考:
controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml中 "Arrow" 示例。
4. 预设颜色
使用 Ant Design 调色板提供的 14 种标准颜色:
<WrapPanel HorizontalAlignment="Left">
<atom:Button Content="Blue" atom:ToolTip.PresetColor="Blue">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Red" atom:ToolTip.PresetColor="Red">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Volcano" atom:ToolTip.PresetColor="Volcano">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Orange" atom:ToolTip.PresetColor="Orange">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Gold" atom:ToolTip.PresetColor="Gold">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Yellow" atom:ToolTip.PresetColor="Yellow">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Lime" atom:ToolTip.PresetColor="Lime">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Green" atom:ToolTip.PresetColor="Green">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Cyan" atom:ToolTip.PresetColor="Cyan">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="GeekBlue" atom:ToolTip.PresetColor="GeekBlue">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Purple" atom:ToolTip.PresetColor="Purple">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Pink" atom:ToolTip.PresetColor="Pink">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Magenta" atom:ToolTip.PresetColor="Magenta">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="Grey" atom:ToolTip.PresetColor="Grey">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
</WrapPanel>
📖 参考:
controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml中 "Colorful Tooltip" → "Presets" 示例。
5. 自定义颜色
使用任意颜色值作为 ToolTip 背景色:
<WrapPanel HorizontalAlignment="Left">
<atom:Button Content="#f50" atom:ToolTip.Color="#f50">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="#2db7f5" atom:ToolTip.Color="#2db7f5">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="#87d068" atom:ToolTip.Color="#87d068">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
<atom:Button Content="#108ee9" atom:ToolTip.Color="#108ee9">
<atom:ToolTip.Tip>prompt text</atom:ToolTip.Tip>
<atom:ToolTip.Placement>Top</atom:ToolTip.Placement>
</atom:Button>
</WrapPanel>
📖 参考:
controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml中 "Colorful Tooltip" → "Custom" 示例。
6. 延迟显示
通过 ShowDelay 控制鼠标悬浮后多久显示 ToolTip:
<!-- 立即显示(无延迟) -->
<atom:Button atom:ToolTip.Tip="Instant"
atom:ToolTip.ShowDelay="0">
Instant
</atom:Button>
<!-- 默认延迟(400ms) -->
<atom:Button atom:ToolTip.Tip="Default delay">
Default (400ms)
</atom:Button>
<!-- 延迟 1 秒 -->
<atom:Button atom:ToolTip.Tip="Delayed 1s"
atom:ToolTip.ShowDelay="1000">
Delayed
</atom:Button>
快速切换(BetweenShowDelay)
当用户在多个带 ToolTip 的控件之间快速移动鼠标时,BetweenShowDelay 控制是否跳过 ShowDelay 直接显示:
<!-- 快速切换时 100ms 内直接显示(默认行为) -->
<StackPanel Orientation="Horizontal" Spacing="4">
<atom:Button atom:ToolTip.Tip="Tooltip A"
atom:ToolTip.BetweenShowDelay="100">A</atom:Button>
<atom:Button atom:ToolTip.Tip="Tooltip B"
atom:ToolTip.BetweenShowDelay="100">B</atom:Button>
<atom:Button atom:ToolTip.Tip="Tooltip C"
atom:ToolTip.BetweenShowDelay="100">C</atom:Button>
</StackPanel>
7. 程序化控制
通过 IsOpen 附加属性控制 ToolTip 的显示/隐藏,需同时设置 IsCustomShowAndHide="True":
<atom:Button atom:ToolTip.Tip="Controlled tooltip"
atom:ToolTip.IsOpen="{Binding IsTooltipOpen}"
atom:ToolTip.IsCustomShowAndHide="True">
Controlled
</atom:Button>
// ViewModel
public class MyViewModel : ReactiveObject
{
private bool _isTooltipOpen;
public bool IsTooltipOpen
{
get => _isTooltipOpen;
set => this.RaiseAndSetIfChanged(ref _isTooltipOpen, value);
}
// 通过按钮或其他操作控制
public void ToggleTooltip()
{
IsTooltipOpen = !IsTooltipOpen;
}
}
⚠️ 必须设置
IsCustomShowAndHide="True",否则ToolTipService的自动管理会覆盖IsOpen绑定。
8. 在禁用控件上显示
默认情况下,禁用的控件不显示 ToolTip。设置 ShowOnDisabled="True" 可改变此行为:
<atom:Button IsEnabled="False"
atom:ToolTip.Tip="This button is disabled"
atom:ToolTip.ShowOnDisabled="True">
Disabled
</atom:Button>
9. 拦截 ToolTip 打开事件
可以在 ToolTip 打开前拦截并取消:
// 在 Code-behind 中
ToolTip.AddToolTipOpeningHandler(myButton, (sender, args) =>
{
// 根据条件决定是否允许打开
if (ShouldPreventTooltip())
{
args.Cancel = true;
}
});
常见组合模式
图标按钮提示
为仅图标的按钮提供功能说明:
<atom:Button ButtonType="Text" Shape="Circle"
Icon="{antdicons:AntDesignIconProvider Kind=QuestionCircleOutlined}"
atom:ToolTip.Tip="Click for more information" />
工具栏按钮提示
为工具栏中的每个按钮添加功能提示:
<StackPanel Orientation="Horizontal" Spacing="4">
<atom:Button ButtonType="Text"
Icon="{antdicons:AntDesignIconProvider Kind=BoldOutlined}"
atom:ToolTip.Tip="Bold (Ctrl+B)" />
<atom:Button ButtonType="Text"
Icon="{antdicons:AntDesignIconProvider Kind=ItalicOutlined}"
atom:ToolTip.Tip="Italic (Ctrl+I)" />
<atom:Button ButtonType="Text"
Icon="{antdicons:AntDesignIconProvider Kind=UnderlineOutlined}"
atom:ToolTip.Tip="Underline (Ctrl+U)" />
</StackPanel>
截断文本提示完整内容
当文本被截断时,使用 ToolTip 显示完整内容:
<atom:TextBlock Text="{Binding LongText}"
TextTrimming="CharacterEllipsis"
MaxWidth="200"
atom:ToolTip.Tip="{Binding LongText}" />
表单字段说明
为表单输入框提供辅助说明:
<StackPanel Orientation="Horizontal" Spacing="4">
<atom:TextBox Watermark="Enter email" />
<atom:Button ButtonType="Text" Shape="Circle"
Icon="{antdicons:AntDesignIconProvider Kind=InfoCircleOutlined}"
atom:ToolTip.Tip="We'll never share your email with anyone else."
atom:ToolTip.Placement="Right" />
</StackPanel>
导航菜单项提示
折叠状态的侧边栏菜单项:
<atom:Button ButtonType="Text"
Icon="{antdicons:AntDesignIconProvider Kind=HomeOutlined}"
atom:ToolTip.Tip="Dashboard"
atom:ToolTip.Placement="Right" />
<atom:Button ButtonType="Text"
Icon="{antdicons:AntDesignIconProvider Kind=SettingOutlined}"
atom:ToolTip.Tip="Settings"
atom:ToolTip.Placement="Right" />