Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SL: Tooltip programmatisch mit Style hinzufügen
Easyrider
myCSharp.de - Member



Dabei seit:
Beiträge: 200
Herkunft: Bayern

Themenstarter:

SL: Tooltip programmatisch mit Style hinzufügen

beantworten | zitieren | melden

Hallo,

ich bin gerade auf der Suche nach Lösungsansätzen für folgendes Problem:

Für ein neues Usercontrol (ListBox) soll der ToolTip variabel gestaltet werden. Das bedeutet, das pro ListBoxItem der ToolTip zur Laufzeit via Datenbankeinträge manuell gesetzt wird. Dieser soll in einer Liste von "ToolTipGroups" sowie ToolTipItems gespeichert werden.

ListBoxItem 1
- ToolTipGroup 1
-- ToolTipItem 1
-- ToolTipItem 2
-- ToolTipItem 3
- ToolTipGroup 2
-- ToolTipItem 1
-- ToolTipItem 2
-- ToolTipItem 3
...

Die ObservableCollection<ToolTipGroup> hat eine Liste von ToolTipItems. Ein ToolTipItem besitzt zwei Eigenschaften namens Key und Value, welche in zwei Textblöcken dargestellt werden soll.

Mein Problem besteht jetzt darin, das ich nicht weiß wie ich das ganze darstellen soll. Ich kann es nicht fest in XAML implementieren, da die Anzahl der ToolTipGroups und -Items unbekannt ist. Dynamisch kann ich (meines Wissens nach) nur Text als CodeBehind zum ToolTip hinzufügen.

Wie kann ich im Code-Behind den Content des ToolTips pro Item so setzen, dass er so arbeitet wie folgender Codeabschnitt?

<StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding Key}" />
    <TextBlock Text="{Binding Value}" />
</StackPanel>

mfg

Easy
private Nachricht | Beiträge des Benutzers
wackelkontakt
myCSharp.de - Member

Avatar #avatar-3290.jpg


Dabei seit:
Beiträge: 109
Herkunft: Dresden

beantworten | zitieren | melden

Hallo,

du kannst das StackPanel in ein DataTemplate packen. Damit tust du sozusagen festlegen wie Daten visualisiert werden sollen.
Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....
private Nachricht | Beiträge des Benutzers
Easyrider
myCSharp.de - Member



Dabei seit:
Beiträge: 200
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

Erstmal danke für deine Antwort.

Hast du vielleicht ein Beispiel dazu? Ich bekomme die Fehlermeldung "A value of type 'DataTemplate' cannot be added to a collection or dictionary of type 'ToolTipGroup'".

Zum Test habe ich mir ein Objekt in den Resources des Controls vom Typ ToolTipGroup angelegt. Darunter dann das DataTemplate. Ich bin mir ziemlich sicher, das ich es einfach noch falsch mache, verstehe aber den Fehler leider nicht ganz.

<class:ToolTipGroup x:Name="toolTipGroup">
    <DataTemplate>
        <Stackpanel>
         ...
        </Stackpanel>
    </DataTemplate>
</class:ToolTipGroup>
private Nachricht | Beiträge des Benutzers
wackelkontakt
myCSharp.de - Member

Avatar #avatar-3290.jpg


Dabei seit:
Beiträge: 109
Herkunft: Dresden

beantworten | zitieren | melden

Hallo,

nicht ganz :-)

Das DataTemplate wird meistens als Resource festgelegt. Hier mal für die Group-Collection:

    <UserControl.Resources>
        <DataTemplate DataType="{x:Type ToolTipGroup}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Key}" />
                <TextBlock Text="{Binding Value}" />
            </StackPanel>
            <!-- Hier kann stattdessen auch ein UserControl angegeben werden:
            <Views:ToolTipGroupView/>-->
        </DataTemplate>
    </UserControl.Resources>
	
	 <!-- Hier ein Container und zuweisen der Collection als Source-->
	<ListView ItemsSource="{Binding ToolTipGroups}"/>

Jetzt werden alle Objekte des ToolTipGroup-Typs mit dem StackPanel dargestellt. Das ist bei dir noch nicht genug, da ja die Collection weitere Listen enthält. Du mußt halt weiter verschachteln.

Da du offensichtlich nicht MVVM anwendest und ich auf der anderen Seite nicht Nicht-MVVM programmieren kann hoffe ich mal das dieser Lösungsansatz auch der richtige für dich ist.
Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....
private Nachricht | Beiträge des Benutzers
wackelkontakt
myCSharp.de - Member

Avatar #avatar-3290.jpg


Dabei seit:
Beiträge: 109
Herkunft: Dresden

beantworten | zitieren | melden

Ich glaube mich zu erinnern das die Angabe des DataTemplates in den Resourcen in Silverlight nicht geht (sondern nur in Wpf). Deshalb hier noch mal eine SL-fähige Variante (-:

            <ListView ItemsSource="{Binding ToolTipGroups}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Key}" />
                            <TextBlock Text="{Binding Value}" />
                        </StackPanel>
                        <!-- Hier kann stattdessen auch ein UserControl angegeben werden:
             <Views:ToolTipGroupView/>-->
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....
private Nachricht | Beiträge des Benutzers