Создание причудливых подсказок в WPF

Автор: Мэхеш Чанд (Mahesh Chand)

У каждого элемента управления в WPF есть свойство Tooltip, к которому можно обращаться из XAML или используемого кода. В этой статье показывается, как создать причудливую подсказку в XAML и WPF.

У каждого элемента управления в WPF есть свойство Tooltip, к которому можно обращаться из XAML или используемого кода. Свойство Tooltip может содержать все виды элементов управления, такие как прямоугольник, текстовый блок или панель. Другими словами, в качестве подсказки для элемента управления можно отобразить другое окно с любым количеством элементов управления.

Следующий код создает простую подсказку для элемента управления кнопки.

<Button Width="100" Height="30">Нажми меня
            <Button.ToolTip>
                <ToolTip>Это текст подсказки для элемента управления кнопки. Меня
                    Можно щелкнуть, если хочется, но это ни к чему не приведет.
                </ToolTip>
            </Button.ToolTip>
        </Button>

Результат выглядит, как показано на рис. 1.

Рис. 1. Простая подсказка

Как я уже говорил, свойство Tooltip может содержать любое число элементов управления. Например, в следующем коде подсказка для кнопки содержит элемент управления StackPanel с двумя дочерними элементами управления StackPanel. Первый элемент управления StackPanel содержит изображение и текстовый блок, а второй элемент управления StackPanel содержит текстовый блок большего размера. Результат выглядит так, как показано на рис. 2, представляя собой причудливую подсказку.

<Button Width="100" Height="30">Нажми меня
            <Button.ToolTip>
                <StackPanel Background="Honeydew" Height="200" Width="200">
                    <StackPanel Background="BurlyWood" Height="30" Width="200" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top" >
                        <Image VerticalAlignment="Top"  Width="30" Height="30" Source="C:\Projects\XAML\FancyTooltip\FancyTooltip\samp.png" Name="image1" />
                        <TextBlock FontFamily="Aharoni" FontSize="24" FontWeight="Bold" Foreground="Black" TextWrapping="Wrap" VerticalAlignment="Top" Height="30" HorizontalAlignment="Right" Width="143">
                            <Run FontFamily="Andalus" FontSize="18" FontWeight="Normal" Text="Привет! Оригинальная подсказка"/>
                        </TextBlock>
                    </StackPanel>
                  
                    <StackPanel Background="BurlyWood" Height="30" Width="200" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top" >
                        <TextBlock TextWrapping="Wrap" Foreground="#FFF9F4F4" TextAlignment="Center" Background="{x:Null}" HorizontalAlignment="Right" VerticalAlignment="Top" Width="181" Height="98">
                          <Run FontFamily="Verdana" FontSize="11" FontWeight="Normal" Foreground="#FF151514"
                               Text="Отформатируйте свою подсказку нужным образом, и вставьте в нее любое изображение, текст или другие элементы управления.
                               Кроме того, можно добавить в эту подсказку дополнительные элементы, чтобы изменить ее внешний вид."/>
                        </TextBlock>
                    </StackPanel>
                </StackPanel>
            </Button.ToolTip>
        </Button>

Рис. 2. Причудливая подсказка

С помощью этого подхода можно создавать подсказки с произвольным внешним видом.

Примечание. В приведенном выше коде можно изменить источник файла изображения, меняя следующий код:  Source="C:\Projects\XAML\FancyTooltip\FancyTooltip\samp.png"