Ich habe einen Tooltip für ein Etikett und möchte, dass es geöffnet bleibt, bis der Benutzer die Maus auf ein anderes Steuerelement bewegt.
Ich habe die folgenden Eigenschaften im Tooltip ausprobiert:
StaysOpen="True"
und
ToolTipService.ShowDuration = "60000"
In beiden Fällen wird der Tooltip jedoch nur genau 5 Sekunden lang angezeigt.
Warum werden diese Werte ignoriert?
ShowDuration
Eigenschaft, denken Sie, es ist so etwas wie30,000
. Alles, was größer ist, wird standardmäßig wieder verwendet5000
.ToolTipService.ShowDuration="60000"
gearbeitet. Es wurde nicht standardmäßig zurückgesetzt5000
.ToolTipService.ShowDuration
Eigenschaft auf einen beliebigen Wert> = 0 (auf Int32.MaxValue) setzen, der Tooltip bleibt jedoch für diese Länge nicht geöffnet.Antworten:
Fügen Sie diesen Code einfach in den Initialisierungsabschnitt ein.
quelle
new FrameworkPropertyMetadata("Top")
funktioniert nichtTooltipService.ShowDuration
funktioniert, aber Sie müssen es für das Objekt mit dem Tooltip wie folgt festlegen:Ich würde sagen, dass dieses Design gewählt wurde, weil es denselben Tooltip mit unterschiedlichen Zeitüberschreitungen auf verschiedenen Steuerelementen ermöglicht.
quelle
ToolTip
direkt ohne explizite Angabe angeben<ToolTip>
, was die Bindung vereinfachen kann.Das hat mich heute Abend auch verrückt gemacht. Ich habe eine
ToolTip
Unterklasse erstellt, um das Problem zu beheben. Für mich unter .NET 4.0ToolTip.StaysOpen
bleibt die Eigenschaft nicht "wirklich" offen.Verwenden Sie in der folgenden Klasse die neue Eigenschaft
ToolTipEx.IsReallyOpen
anstelle der EigenschaftToolTip.IsOpen
. Sie erhalten die Kontrolle, die Sie wollen. Über denDebug.Print()
Aufruf können Sie im Debugger-Ausgabefenster sehen, wie oftthis.IsOpen = false
aufgerufen wird! Soviel zuStaysOpen
oder soll ich sagen"StaysOpen"
? Genießen.Kleiner Scherz: Warum hat Microsoft
DependencyProperty
Eigenschaften (Getter / Setter) nicht virtuell gemacht, damit wir Änderungen in Unterklassen akzeptieren / ablehnen / anpassen können? Odervirtual OnXYZPropertyChanged
für jeden etwas machenDependencyProperty
? Pfui.---Bearbeiten---
Meine obige Lösung sieht im XAML-Editor seltsam aus - der Tooltip wird immer angezeigt und blockiert Text in Visual Studio!
Hier ist ein besserer Weg, um dieses Problem zu lösen:
Einige XAML:
Etwas Code:
Fazit: Etwas ist anders an Klassen
ToolTip
undContextMenu
. Beide haben "Service" -Klassen wieToolTipService
undContextMenuService
, die bestimmte Eigenschaften verwalten, und beidePopup
werden während der Anzeige als "geheimes" übergeordnetes Steuerelement verwendet. Schließlich habe ich festgestellt, dass ALLE XAML ToolTip-Beispiele im Web die Klasse nichtToolTip
direkt verwenden. Stattdessen binden sie einStackPanel
mitTextBlock
s ein. Dinge, die dich sagen lassen: "hmmm ..."quelle
Sie möchten wahrscheinlich Popup anstelle von Tooltip verwenden, da Tooltip davon ausgeht, dass Sie es auf vordefinierte Weise für UI-Standards verwenden.
Ich bin nicht sicher, warum StaysOpen nicht funktioniert, aber ShowDuration funktioniert wie in MSDN dokumentiert - es ist die Zeit, die der Tooltip angezeigt wird, wenn er angezeigt wird. Stellen Sie einen kleinen Wert (z. B. 500 ms) ein, um den Unterschied zu erkennen.
Der Trick in Ihrem Fall besteht darin, den Status "Zuletzt schwebendes Steuerelement" beizubehalten. Sobald Sie dies jedoch getan haben, sollte es ziemlich trivial sein, das Platzierungsziel und den Inhalt dynamisch (entweder manuell oder über Bindung) zu ändern, wenn Sie ein Popup verwenden. oder das letzte sichtbare Popup ausblenden, wenn Sie mehrere verwenden.
Es gibt einige Fallstricke bei Popups, wenn es um die Größenänderung und das Verschieben von Fenstern geht (Popups werden nicht mit den Containern verschoben). Daher sollten Sie dies auch berücksichtigen, während Sie das Verhalten optimieren. Siehe diesen Link für weitere Details.
HTH.
quelle
Wenn Sie angeben möchten, dass nur bestimmte Elemente in Ihrer
Window
effektiv unbegrenzteToolTip
Dauer haben, können SieStyle
in IhrerWindow.Resources
für diese Elemente ein definieren. Hier ist einStyle
fürButton
das hat so einToolTip
:Man kann auch hinzufügen
Style.Resources
,Style
um das Erscheinungsbild der angezeigten zu ändernToolTip
, zum Beispiel:Hinweis: Als ich dies tat, verwendete ich auch
BasedOn
in,Style
damit alles andere, was für die Version meines benutzerdefinierten Steuerelements mit einem Normal definiert wurdeToolTip
, angewendet wurde.quelle
Ich habe erst neulich mit dem WPF Tooltip gerungen. Es scheint nicht möglich zu sein, zu verhindern, dass es von selbst erscheint und verschwindet, also habe ich am Ende auf die Behandlung des
Opened
Ereignisses zurückgegriffen. Zum Beispiel wollte ich verhindern, dass es geöffnet wird, es sei denn, es enthält Inhalte. Deshalb habe ich dasOpened
Ereignis behandelt und dann Folgendes ausgeführt:Es ist ein Hack, aber es hat funktioniert.
Vermutlich könnten Sie das
Closed
Ereignis auf ähnliche Weise behandeln und anweisen, es erneut zu öffnen, um es sichtbar zu halten.quelle
Nur der Vollständigkeit halber: Im Code sieht es so aus:
quelle
Auch wenn Sie jemals ein anderes Steuerelement in Ihre QuickInfo einfügen möchten, kann es nicht fokussiert werden, da eine QuickInfo selbst fokussiert werden kann. Wie Micahtan sagte, ist Ihr bester Schuss ein Popup.
quelle
Habe mein Problem mit dem gleichen Code behoben.
ToolTipService.ShowDurationProperty.OverrideMetadata (typeof (DependencyObject), neue FrameworkPropertyMetadata (Int32.MaxValue));
quelle
Es funktioniert für mich. Kopieren Sie diese Zeile in Ihren Klassenkonstruktor.
quelle