2016-04-01 27 views
2

Ich bin relativ neu in WPF und verwende ein Stackpanel, um eine Liste von Bildern anzuzeigen. Diese Liste von Bildern ist dynamisch, daher werden die Stackpanel-Elemente zur Laufzeit im Code und nicht direkt im XAML hinzugefügt.Wie kann ich einzelne ToolTips für jedes StackPanel-Objekt festlegen?

Ich war dann neugierig, wie ich einzelne Tooltips für jedes Bild in der Stackpanel anzeigen würde. Ich dachte, ich könnte etwas tun, wie folgt:

private void mainTaskBar_PreviewMouseMove(object sender, MouseEventArgs e) 
{ 
    foreach (Image img in imgList) 
     if (img == e.OriginalSource) 
      displayCorrespondingTooltip(img); 
} 

Aber das scheint ein bisschen zu viel zu tun haben. Gibt es eine Möglichkeit, einfach eine Liste der Kinder im Stackpanel zu bekommen und einfach jede einzelne ToolTip mit SetToolTip() zu setzen? Ich denke, das wäre viel eleganter.

Danke!

+1

Die „richtige“ WPF Weg, dies zu tun wäre eine ObservableCollection Ihrer Elemente, die an die ItemsSource-Eigenschaft eines ItemsControl gebunden sind, mit einer ItemTemplate, die Ihr Bild anzeigt, mit Tooltip usw. Nicht, dass Sie alles neu schreiben sollten, jetzt wo es funktioniert! Aber es ist eine sehr einfache und mächtige Art, Dinge zu tun. –

Antwort

1

Sie eine Methode definieren können, wie die folgenden Tooltip für verschiedene Steuerungen zuzuweisen:

public void displayCorrespondingTooltip<T>(T control, string tooltipText) 
    { 
     //For images 
     if (control.GetType() == typeof(Image)) 
     { 
      (control as Image).ToolTip = tooltipText; 
     } 
     //For Rectangles 
     if (control.GetType() == typeof(Rectangle)) 
     { 
      (control as Rectangle).ToolTip = tooltipText; 
     } 
    } 

Und van wie das genannt werden, folgende:

displayCorrespondingTooltip<Image>(img, "This will be the image tooltip"); 
displayCorrespondingTooltip<Rectangle>(rectObject,"rectangle tooltip"); 
+0

Ohhh ich sehe. So kann ich einfach die Tooltips und Einstellungen hinzufügen, die ich jedem Steuerelement hinzufügen möchte, bevor es sogar zum Stackpanel hinzugefügt wird! Vielen Dank :) –

Verwandte Themen