This article has been localized into Russian by the community.
Всплывающие подсказки элементов управления
У всплывающих подсказок могут быть разные названия, но суть остается одна: способность получить дополнительную информацию об определенном элементе интерфейса или ссылке при наведении мыши над ними. WPF поддерживает эту концепцию с помощью свойства ToolTip, находящегося в классе FrameworkElement, от которого наследуются почти все элементы WPF.
Создать всплывающую подсказку очень легко, в чем вы убедитесь, посмотрев на первый, очень простой, пример.
<Window x:Class="WpfTutorialSamples.Control_concepts.ToolTipsSimpleSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ToolTipsSimpleSample" Height="150" Width="400">
<Grid VerticalAlignment="Center" HorizontalAlignment="Center">
<Button ToolTip="Click here and something will happen!">Click here!</Button>
</Grid>
</Window>
На картинке видно, что при наведении мыши на кнопку, появляется всплывающее окно с указанной строкой. Это тот минимум, который предлагает большинство фреймворков - обычная строка с текстом.
Но в WPF ToolTip это не строка, а объект, что означает, что он может быть чем угодно в зависимости от нашего желания. Это открывает нам кучу возможностей обеспечения пользователя более насыщенными информацией и полезными всплывающими окнами. Как пример, посмотрим на следующий код и сравним с предыдущим:
<Window x:Class="WpfTutorialSamples.Control_concepts.ToolTipsAdvancedSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ToolTipsAdvancedSample" Height="200" Width="400" UseLayoutRounding="True">
<DockPanel>
<ToolBar DockPanel.Dock="Top">
<Button ToolTip="Create a new file">
<Button.Content>
<Image Source="/WpfTutorialSamples;component/Images/page_white.png" Width="16" Height="16" />
</Button.Content>
</Button>
<Button>
<Button.Content>
<Image Source="/WpfTutorialSamples;component/Images/folder.png" Width="16" Height="16" />
</Button.Content>
<Button.ToolTip>
<StackPanel>
<TextBlock FontWeight="Bold" FontSize="14" Margin="0,0,0,5">Open file</TextBlock>
<TextBlock>
Search your computer or local network
<LineBreak />
for a file and open it for editing.
</TextBlock>
<Border BorderBrush="Silver" BorderThickness="0,1,0,0" Margin="0,8" />
<WrapPanel>
<Image Source="/WpfTutorialSamples;component/Images/help.png" Margin="0,0,5,0" />
<TextBlock FontStyle="Italic">Press F1 for more help</TextBlock>
</WrapPanel>
</StackPanel>
</Button.ToolTip>
</Button>
</ToolBar>
<TextBox>
Editor area...
</TextBox>
</DockPanel>
</Window>
Заметим, что в этом примере первой кнопке соответствует простое текстовое всплывающее окно, а второй - гораздо более сложная конструкция. Мы используем панель, как корень, что дает нам возможность добавлять внутрь что угодно. Результат - прикольная штука с заголовком, описанием и подсказкой, говорящей нажать F1 для помощи, да к тому же еще и с иконкой.
Продвинутые опции
Класс ToolTipService имеет кучу интересных свойств, меняющих поведение всплывающих окон. Их можно менять прямо внутри объекта, содержащего всплывающее окно, как в примере, где мы увеличиваем время видимости окна, используя свойство ShowDuration(мы установили его равным 5000 миллисекундам или 5 секундам):
<Button ToolTip="Create a new file" ToolTipService.ShowDuration="5000" Content="Open" />
Кроме того, можно указать, будет ли всплывающее окно иметь тень. Для этого используется свойство HasDropShadow. Можно также указать, должно ли окно показываться, если объект не доступен, используя свойство ShowOnDisabled. Есть еще несколько интересных свойств, полный список которых можно найти в следующей документации: http://msdn.microsoft.com/en-us/library/system.windows.controls.tooltipservice.aspx
Заключение
Всплывающие окна могут очень сильно помочь пользователю, и в WPF они одновременно очень просты в использовании и чрезвычайно гибки. Используя одновременно возможность полностью контролировать содержание и дизайн окна и свойства класса ToolTipService можно создать удобные подсказки для пользователей вашего приложения.