У меня есть всплывающая подсказка для метки, и я хочу, чтобы она оставалась открытой, пока пользователь не переместит мышь к другому элементу управления.
Я пробовал следующие свойства во всплывающей подсказке:
StaysOpen="True"
и
ToolTipService.ShowDuration = "60000"
Но в обоих случаях всплывающая подсказка отображается ровно 5 секунд.
Почему игнорируются эти значения?
ShowDuration
свойства установлено максимальное значение , думаю, это что-то вроде30,000
. Что-нибудь большее, чем это, по умолчанию вернется к5000
.ToolTipService.ShowDuration="60000"
работал. По умолчанию он не вернулся к5000
.ToolTipService.ShowDuration
свойства любое значение> = 0 (для Int32.MaxValue), однако всплывающая подсказка не будет оставаться открытой в течение этой длины.Ответы:
Просто поместите этот код в раздел инициализации.
источник
new FrameworkPropertyMetadata("Top")
не работает.TooltipService.ShowDuration
работает, но вы должны установить его на объекте, имеющем всплывающую подсказку, например:Я бы сказал, что этот дизайн был выбран потому, что он позволяет использовать одну и ту же всплывающую подсказку с разными таймаутами для разных элементов управления.
источник
ToolTip
напрямую, без явного указания<ToolTip>
, что может упростить привязку.Это тоже сводило меня с ума сегодня вечером. Я создал
ToolTip
подкласс для решения этой проблемы. Для меня в .NET 4.0ToolTip.StaysOpen
свойство «не совсем» остается открытым.В приведенном ниже классе используйте новое свойство
ToolTipEx.IsReallyOpen
вместо свойстваToolTip.IsOpen
. Вы получите желаемый контроль. ПосредствомDebug.Print()
вызова вы можете посмотреть в окне вывода отладчика, сколько разthis.IsOpen = false
вызывается! Так много дляStaysOpen
, или я должен сказать"StaysOpen"
? Наслаждаться.Небольшая напыщенная речь: Почему Microsoft не сделала
DependencyProperty
свойства (геттеры / сеттеры) виртуальными, чтобы мы могли принимать / отклонять / корректировать изменения в подклассах? Или сделатьvirtual OnXYZPropertyChanged
для каждогоDependencyProperty
? Тьфу.---Редактировать---
Мое решение выше выглядит странно в редакторе XAML - всплывающая подсказка всегда отображается, блокируя некоторый текст в Visual Studio!
Вот лучший способ решить эту проблему:
Некоторый XAML:
Некоторый код:
Вывод: что-то другое в классах
ToolTip
иContextMenu
. У обоих есть «служебные» классы, такие какToolTipService
иContextMenuService
, которые управляют определенными свойствами, и оба используютсяPopup
в качестве «секретного» родительского элемента управления во время отображения. Наконец, я заметил, что ВСЕ примеры XAML ToolTip в Интернете не используют классToolTip
напрямую. Вместо этого они вставляют aStackPanel
сTextBlock
s. То, что заставляет вас сказать: "хммм ..."источник
Вероятно, вы захотите использовать всплывающее окно вместо всплывающей подсказки, поскольку всплывающая подсказка предполагает, что вы используете его в соответствии с предопределенными стандартами пользовательского интерфейса.
Я не уверен, почему StaysOpen не работает, но ShowDuration работает так, как описано в MSDN - это время, в течение которого всплывающая подсказка отображается, КОГДА она отображается. Установите небольшое значение (например, 500 мс), чтобы увидеть разницу.
Хитрость в вашем случае заключается в поддержании состояния «последний зависший элемент управления», но как только вы это сделаете, будет довольно просто изменить цель размещения и контент динамически (вручную или через привязку), если вы используете одно всплывающее окно, или скрытие последнего видимого всплывающего окна, если вы используете несколько.
С всплывающими окнами есть некоторые проблемы, связанные с изменением размера и перемещением окон (всплывающие окна не перемещаются с контейнерами), поэтому вы можете также помнить об этом, когда настраиваете поведение. См. Эту ссылку для получения более подробной информации.
НТН.
источник
Если вы хотите указать, что только определенные элементы в вашем
Window
файле имеют фактически неограниченнуюToolTip
продолжительность, вы можете определитьStyle
в своемWindow.Resources
для этих элементов. ВотStyle
пример того,Button
что получилось такоеToolTip
:Можно также добавить
Style.Resources
к,Style
чтобы изменить внешний видToolTip
отображаемых элементов , например:Примечание. Когда я делал это, я также использовал
BasedOn
в,Style
поэтому все остальное, определенное для версии моего настраиваемого элемента управленияToolTip
, было применено.источник
Я боролся с WPF Tooltip только на днях. Кажется, невозможно остановить его появление и исчезновение само по себе, поэтому в конце концов я прибег к обработке
Opened
события. Например, я хотел, чтобы он не открывался, если в нем нет какого-либо содержимого, поэтому я обработалOpened
событие, а затем сделал следующее:Это взлом, но он сработал.
Предположительно, вы могли бы аналогичным образом обработать
Closed
событие и сказать ему, чтобы оно открылось снова, таким образом сохраняя его видимым.источник
Просто для полноты: в коде это выглядит так:
источник
Кроме того, если вы когда-нибудь захотите поместить какой-либо другой элемент управления в свою всплывающую подсказку, его нельзя будет сфокусировать, поскольку сама всплывающая подсказка может получить фокус. Итак, как сказал микахтан, ваш лучший снимок - всплывающее окно.
источник
Исправлена моя проблема с тем же кодом.
ToolTipService.ShowDurationProperty.OverrideMetadata (typeof (DependencyObject), новый FrameworkPropertyMetadata (Int32.MaxValue));
источник
У меня это работает. Скопируйте эту строку в свой конструктор класса.
источник