ToolTipService и Popup

97

Настройка свойств ToolTipService

Существуют свойства всплывающих подсказок, которые нельзя задать с помощью свойств класса ToolTip. Для этого предназначен другой класс — ToolTipService. Он позволяет задать длительность задержек при отображении всплывающей подсказки.

Все свойства этого класса являются прикрепленными свойствами, поэтому их можно указывать прямо в дескрипторе элемента управления, как показано ниже:

<Button ToolTipService.InitialShowDelay="1">
</Button>

Класс ToolTipService определяет много тех же свойств, что и класс ToolTip. А это значит, что при работе со всплывающими подсказками, содержащими только текст, можно использовать более простой синтаксис. Вместо добавления вложенного элемента ToolTip, можно задать все, что необходимо, с помощью атрибутов.

InitialShowDelay

Задает задержку (в миллисекундах) перед выводом подсказки после наведения указателя мыши на элемент

ShowDuration

Задает время (в миллисекундах), в течение которого будет отображаться подсказка, если пользователь не сдвинет указатель мыши

BetweenShowDelay

Задает временной интервал (в миллисекундах), в течение которого пользователь может переходить от одной всплывающей подсказки к другой без задержки, определяемой свойством InitialShowDelay. Например, если свойство BetweenShowDelay равно 5000, то у пользователя будет пять секунд на то, чтобы навести указатель мыши на другой элемент управления, у которого имеется всплывающая подсказка. Если пользователь наведет указатель мыши на другой элемент в течение этих пяти секунд, то новая подсказка появится немедленно. Если же пользователь потратит больше пяти секунд, в действие вступит InitialShowDelay. В этом случае вторая подсказка появится после задержки, указанной в свойстве InitialShowDelay.

ToolTip

Задает содержимое всплывающей подсказки. Задание свойства ToolTipService.ToolTip эквивалентно заданию свойства FrameworkElement.ToolTip элемента

HasDropShadow

Определяет, будет ли контекстное окно указателя иметь размытую тень, которая "приподнимает" его над находящимся под ним окном

ShowOnDisabled

Определяет поведение подсказки при отключении базового элемента. Если это свойство имеет значение true, то подсказка будет отображаться для отключенных элементов (т.е. элементов, свойство IsEnabled которых равно false). По умолчанию это свойство равно false, т.е. подсказка отображается только для активных элементов управления

В этом классе определены также два маршрутизируемых события: ToolTipOpening и ToolTipClosing. Реагируя на эти события, можно заполнить окно подсказки актуальным содержимым или переопределить его поведение. Например, если в каждом из этих событий установить флаг handled, подсказки не будут отображаться или скрываться автоматически. Тогда вы сможете выводить и скрывать их вручную с помощью свойства IsOpen.

Не стоит дублировать параметры всплывающих подсказок для нескольких элементов управления. Если вы хотите получить однотипное поведение всплывающих подсказок во всем приложении, используйте стили, чтобы настройки применялись автоматически. К сожалению, значения свойства ToolTipService не наследуются, то есть если задать их на уровне окна или контейнера, они не будут распространяться на вложенные элементы.

Popup

Элемент управления Popup имеет много общего с элементом ToolTip, хотя ни один из них не является наследником другого.

Как и ToolTip, элемент Popup может содержать любой элемент WPF. (Это содержимое хранится в свойстве Popup.Child, а не в свойстве Content, как во всплывающих подсказках.) Как и в элементе ToolTip, содержимое Popup может распространяться за пределы окна. И, наконец, местоположение элемента Popup можно задать с помощью тех же свойств, а показать и скрыть его можно с помощью того же свойства IsOpen.

Но более важны различия между элементами Popup и ToolTip:

Ниже представлен пример использования элемента Popup:

<Grid>
        <TextBlock TextWrapping="Wrap" Margin="5" FontSize="14">
            Программирование на языке C#, <Run TextDecorations="Underline" Cursor="Hand"
                                               MouseEnter="Run_MouseEnter">платформа WPF</Run>
        </TextBlock>
        <Popup Name="pLink" StaysOpen="False" Placement="Mouse" MaxWidth="150"
               PopupAnimation="Scroll" AllowsTransparency="True">
            <Border BorderBrush="LightBlue" BorderThickness="2" Background="White">
                <TextBlock Margin="10" TextWrapping="Wrap">
                    Посмотреть на <Hyperlink NavigateUri="http://professorweb.ru"
                                             Click="Hyperlink_Click">professorweb.ru</Hyperlink>
                </TextBlock>
            </Border>
        </Popup>
    </Grid>
private void Run_MouseEnter(object sender, MouseEventArgs e)
{
     pLink.IsOpen = true;
}

private void Hyperlink_Click(object sender, RoutedEventArgs e)
{
     Process.Start(((Hyperlink)sender).NavigateUri.ToString());
}
Popup
Пройди тесты
Лучший чат для C# программистов