Entwickler-Ecke
WPF / Silverlight - Element zu DockPanel in ListBoxItem hinzufügen
DrHoas - Mo 07.03.16 13:47
Titel: Element zu DockPanel in ListBoxItem hinzufügen
Hallo,
ich hab ein DockPanel in einem ListBoxItem. Darin ist dann ein TextBlock:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| <ListBox Name="LB1" Style="{StaticResource FlipsListBoxStyle}" Margin="10,34,0,0" SelectionMode="Multiple"> <ListBox.ItemTemplate> <DataTemplate> <DockPanel Name="dockpanel"> <TextBlock Text="{Binding}"/> </DockPanel> </DataTemplate> </ListBox.ItemTemplate> <ListBox.ItemContainerStyle> <Style TargetType="{x:Type ListBoxItem}"> <Setter Property="Focusable" Value="False"/> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> </Style> </ListBox.ItemContainerStyle> </ListBox> |
Im C#-Code hab ich
C#-Quelltext
1: 2:
| List<String> listString = new List<String>(); LB1.ItemSource = listString; |
Zur Laufzeit füge ich also Text in die ListBox ein. Dabei möchte ich dem DockPanel abhängig vom eingefügten Item, ein IntegerUpDown vom Extended WPF Toolkit hinzufügen oder eben nicht. Ich schaff es allerdings nicht das DockPanel anzusprechen. Wie kann ich das machen?
Dank und Gruß
Philipp
Moderiert von
Christian S.: Code- durch XML- und C#-Tags ersetzt
Th69 - Mo 07.03.16 18:42
Hallo,
du scheinst den Begriff Template nicht richtig verstanden zu haben. Dies ist nur eine Schablone, d.h. das konkrete Element wird erst zur Laufzeit erzeugt, d.h. du kannst darauf nicht direkt per Code über den Namen darauf zugreifen.
Warum verwendest du denn auch dafür kein MVM, d.h. greifst per DataBinding auf die ListBox (und dessen Template) zu? Dafür müßtest du dann allerdings das
IntegerUpDown-Control schon im Template definieren und einfach dessen
Visibility per DataBinding über das ViewModel setzen.
Ansonsten hilft dir vllt. auch
Change Templates Dynamically in WPF [
http://weblogs.asp.net/psheriff/change-templates-dynamically-in-wpf].
DrHoas - Di 08.03.16 17:07
Den Begriff Template hab ich schon richtig verstanden, dachte aber, dass ich direkt nach dem Erzeugen auf das eben erzeugte Element zugreifen kann.
Interessanterweise hatte ich das Ganze erst so gemacht, dass ich das IntegerUpDown im Template hatte. Ich hab es dann aber wieder rausgenommen, weil ich es in 90 % der Fälle nicht brauche. Außerdem wollte ich manchmal ein IntegerUpDown und manchmal eine ComboBox einfügen.
Ich werde es dann jetzt wohl so machen, dass ich sowohl IntegerUpDown als auch die ComboBox ins Template reinnehme und die Visibility binde.
Hier mal, was ich eigentlich machen möchte. Vielleicht gibt es ja auch eine viel schönere Lösung:
Eine ListBox wird zur Laufzeit gefüllt. Abhängig vom Item soll rechts neben dem Item ein IntegerUpDown, eine ComboBox oder nichts stehen. Die ListBox sieht dann z. B. so aus:
AAA 1 IntegerUpDown (wird hier eingefügt da Item=AAA)
BBB
CCC XYZ ComboBox (wird hier eingefügt da Item=CCC)
Mit dem IntegerUpDown möchte ich den Zähler von AAA ändern können. Mit der ComboBox möchte ich XYZ auswählen.
Bin ich da auf dem richtigen Weg?
Dank und Gruß
Philipp
DrHoas - Mi 09.03.16 08:23
Das klingt genau nach dem, was ich brauche. Danke für den Tipp.
Philipp
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!