WPF Datatemplate: Wie ein Tooltip erstellen just-in-time?
-
12-09-2019 - |
Frage
Ich bin mit Datatemplates Elementen in einem Item zu machen. Ich möchte für jedes Element einen Tooltip zeigen. Wenn ich eine Bindung wie Quick-Info verwenden = „{Binding MyToolTip, Mode = OneWay}“, WPF den Tooltip einmal am Anfang bekommt und nicht den Tooltip aktualisieren, wenn es geöffnet wird.
Meine Artikel implementieren INotifyPropertyChanged, so im Prinzip I Änderungsbenachrichtigungen für MyToolTip erzeugen könnte. Das Problem ist, wird der Tooltip basierend auf vielen Stücke von Informationen, die in der zugrunde liegenden Modell erzeugt. Diese Informationen ändern sich häufig und es wäre sowohl umständlich und ineffizient sein, um Änderungsbenachrichtigungen für die MyToolTip Eigenschaft zu erzeugen. Außerdem will ich nicht Tooltips für alle Elemente zunächst hergestellt werden. Stattdessen würde Ich mag einen neuen Tooltip zwingen, erzeugt wird, wenn der Tooltip geöffnet wird. Wie kann ich es tun?
Lösung
Sie werden ein wenig Code-behind verwenden, aber es ist nicht so schlimm.
<object ToolTip="{Binding MyToolTip, Mode=OneWay}" ToolTipOpening="MyToolTip_Opening" />
Im Code-behind
private void MyToolTip_Opening(object sender, ToolTipEventArgs e)
{
DependencyObject depObj = sender as DependencyObject;
if (depObj == null) return;
BindingExpression be = BindingOperations.GetBindingExpression(depObj, FrameworkElement.ToolTipProperty);
if (be != null) be.UpdateTarget();
}