Содержание
Часто, в приложениях, при наведении указателя мыши на какой-либо элемент управления, можно увидеть всплывающую подсказку, содержащую какой-либо поясняющий текст или даже изображение. Всплывающие подсказки ToolTip
и Popup
в WPF служат именно для этих целей. Рассмотрим работу этих элементов управления.
Всплывающие подсказки ToolTip и Popup
Элемент ToolTip
Элемент ToolTip
представляет собой всплывающую подсказку, которая автоматическим появляется через некоторое время над элементом управления. Все элементы, являющиеся наследниками класса FrameworkElement
содержат специальное свойство ToolTip
, которое используется для отображения всплывающей подсказки. Рассмотрим следующий пример:
<Window x:Class="WpfApp5.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp5" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> <Button Content="Кнопка" ToolTip="Это подсказка для кнопки"/> </StackPanel> </Window>
Здесь мы указали в качестве значения свойства ToolTip
для кнопки обычную строку. Запустите приложение и наведите курсор мыши на кнопку. Через некоторое время вы увидите подсказку:При необходимости, мы можем произвести настройку подсказки, используя в качестве значения для свойства
ToolTip
не строки, а уже полноценного объекта типа ToolTip
у которого определены следующие свойства:
Свойство | Тип | Описание |
CustomPopupPlacementCallback |
CustomPopupPlacementCallback |
Метод обработчика делегата, который определяет положение элемента ToolTip |
HasDropShadow |
bool |
Значение, указывающее, имеет ли элемент управления тень |
HorizontalOffset |
double |
Расстояние по горизонтали между началом координат целевого объекта и точкой выравнивания всплывающего окна. |
IsOpen |
bool |
Значение, указывающее, видна ли подсказка. |
Placement |
PlacementMode |
Положение элемента управления ToolTip в момент его открытия, а поведение элемента при пересечении границ экрана. |
PlacementRectangle |
Rect |
Прямоугольная область, в которой будет размещен элемент управления в момент его открытия. |
PlacementTarget |
UIElement |
Элемент UIElement , относительно которого позиционируется ToolTip при открытии. |
StaysOpen |
bool |
Задает значение, которое указывает, должен ли открытый объект ToolTip оставаться открытым до щелчка пользователем кнопкой мыши, если указатель не установлен на элементе ToolTip . |
VerticalOffset |
double |
Расстояние по вертикали между началом координат целевого объекта и точкой выравнивания всплывающего окна. |
Для отслеживания состояния объекта ToolTip определены следующие события:
Событие | Описание |
public event System.Windows.RoutedEventHandler Opened; |
Генерируется, когда всплывающая подсказка показывается пользователю |
public event System.Windows.RoutedEventHandler Closed; |
Генерируется, когда всплывающая подсказка скрывается |
Изменим код кнопки следующим образом:
<Button Content="Кнопка"> <Button.ToolTip> <ToolTip Background="LightBlue" Placement="Center"> Подсказка для кнопки </ToolTip> </Button.ToolTip> </Button>
Теперь наша подсказка будет светло-голубого цвета и появится по центру кнопки:
Свойство
Content
у ToolTip
определено как object
, поэтому мы можем отображать во всплывающей подсказке, в принципе, любые объекты. Например, покажем в подсказке картинку. Для этого добавьте в проект любое изображение, например:
В свойствах файла установим значение «Всегда копировать»:
Теперь перепишем наш пример следующим образом:
<Button Content="Кнопка"> <Button.ToolTip> <ToolTip Background="LightBlue"> <ToolTip.Content> <Image Source="/picture.png"/> </ToolTip.Content> </ToolTip> </Button.ToolTip> </Button>
Запустим приложение и посмотрим на результат:
Элемент Popup
Элемент Popup
похож на ToolTip
, однако, объекты этого типа не появляются автоматически и мы сами управляем открытием и закрытием всплывающего окна. Класс Popup
предоставляет нам следующие дополнительные свойства, по сравнению с ToolTip
:
Свойство | Тип | Описание |
AllowsTransparency |
bool |
Значение, указывающее, может ли элемент управления Popup содержать прозрачное содержимое. |
PopupAnimation |
PopupAnimation |
Анимация для открытия и закрытия элемента управления |
Child |
UIElement |
Дочерний элемент |
Рассмотрим следующий пример использования Popup
:
<TextBlock MouseMove="TextBlock_MouseMove" >Наведи курсор мыши, чтобы увидеть кнопку</TextBlock> <Popup x:Name="popup" StaysOpen="False"> <Popup.Child> <Button Content="Кнопка" Click="Button_Click"/> </Popup.Child> </Popup>
Первый элемент управления — обычный текстовый блок TextBlock
при наведении курсора мыши на который будет появляться кнопка. Для этого у TextBlock
определен обработчик события MouseMove
:
private void TextBlock_MouseMove(object sender, MouseEventArgs e) { popup.IsOpen = true; }
Второй элемент — непосредственно сам Popup
в свойстве Child
которого мы разместили элемент Button
:
<Popup x:Name="popup" StaysOpen="False"> <Popup.Child> <Button Content="Кнопка" Click="Button_Click"/> </Popup.Child> </Popup>
По умолчанию, свойство StaysOpen
у Popup
равно true
, то есть подсказка после появления не исчезает. Чтобы этого не происходило, мы установили это свойство в значение false
.
Клик по кнопке будет закрывать подсказку. Для этого у элемента Button определено событие Click
:
private void Button_Click(object sender, RoutedEventArgs e) { popup.IsOpen = false; }
Запустите приложение и наведите курсор мыши на текстовый блок — вы увидите кнопку, клик по которой закроет Popup
.
Служба ToolTipService
Для показа всплывающих подсказок мы также можем использовать службу (сервис) ToolTipService
, которая предоставляет как свойства, похожие на свойства у ToolTip
, так и свои собственные присоединяемые свойства:
Свойство | Тип | Описание |
Between |
int |
Максимальное время между отображением двух подсказок, где вторая подсказка отображается без задержки |
Initial |
int |
Интервал времени до открытия подсказки. |
Show |
int |
Время отображения подсказки. |
Show |
bool |
Указывает, отображается ли всплывающая подсказка для объекта, который не активен. |
Tool |
object |
Содержимое подсказки |
Воспользуемся этими свойствами для отображения всплывающей подсказки:
<Button Content="Кнопка с подсказкой" ToolTipService.InitialShowDelay="2000" ToolTipService.ShowDuration="5000" ToolTipService.ToolTip="Подсказка будет показываться 5 секунд"/>
Здесь мы, используя присоединяемые свойства ToolTipService
, создаем всплывающую подсказку, которая появится через 2 секунды после наведения курсора мыши на кнопку и будет показываться в течение пяти секунд.
Итого
Для показа всплывающих подсказок для элементов управления в WPF могут использоваться элементы ToolTip
и Popup
. При этом, ToolTip
показывается автоматически, а отображением Popup
управляем мы. Также мы можем использовать службу ToolTipService
, которая предоставляет нам дополнительные присоединяемые свойства, с помощью которых мы можем регулировать время показа подсказки.