Fontsize erstellter Listboxitems
He Leute,
ich füge einer Listbox per Items.Add() Listboxitems dynamisch hinzu.
Danach möchte ich die Fontsize der Items ändern. Leider funktioniert mein Code nicht richtig:
Code:
foreach (string element in li_Bezeichner)
lb_bezeichener.Items.Add(element);
foreach (ListBoxItem li in lb_bezeichener.Items)
li.FontSize = 30;
Das compilieren funktioniert Fehlerfrei, wenn ich allerdings versuche den Code auszuführen bekomme ich eine InvalidCastException .
Wo könnte der Fehler stecken?
Danke schonmal
LG THPS
AW: Fontsize erstellter Listboxitems
Du fügst Strings ein und versuchst die dann auf ListBoxItem zu casten und das klappt halt nicht.
So sollte es gehen(jetzt nur der Idee nach, hab den Code nicht getestet):
Code:
lb_bezeichner.Items.Add(new ListBoxItem() { Content = element };
bzw. besser noch weil ohne die zweite Schleife:
Code:
lb_bezeichner.Items.Add(new ListBoxItem() { Content = element, FontSize = 30 });
AW: Fontsize erstellter Listboxitems
Vielen Dank, das hat geklappt, ich war der Meinung, das Items.Add auch so ein ListboxItem erstellt, welches man dann ansprechen kann.
Lg
AW: Fontsize erstellter Listboxitems
Jein, intern wird das schon irgendwie umgewandelt, da er es sonst nicht darstellen kann aber für den programmatischen Zugriff ist es einfach so, dass er dir das zurückgibt was du reinsteckst.
AW: Fontsize erstellter Listboxitems
Stevies Variante würde ich unterschreiben. Wobei ich ehrlich gesagt in so einem Fall wahrscheinlich einen DataTemplate für die Einträge der ListBox definiert hätte.
Zum Verständnis des Zusammenhangs zwischen Items der ListBox und den ListBoxItems hilft vielleicht folgendes: Die Items sind die "Daten" der ListBox. Die ListBoxItems dienen der "Präsentation" dieser Daten. Man könnte also sagen, die Items der Liste werden beim Rendern in ein ListBoxItem "eingepackt".
Wenn du später an die ListBoxItems rankommen willst, müsstest du etwa sowas verwenden:
Code:
lb_bezeichner.LayoutUpdated += OnBezeichnerListLayoutUpdated;
private void OnBezeichnerListLayoutUpdated(object sender, EventArgs e)
{
for (int i = 0; i < lb_bezeichner.Items.Count; i++)
{
ListBoxItem listItem = lb_bezeichner.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
if (listItem != null)
{
// mach was mit dem listItem
}
}
}
Für dein Problem hielte ich sowas aber für etwas sehr hintenrum. Das sauberste wäre wie gesagt ein DataTemplate (meiner Meinung nach).
AW: Fontsize erstellter Listboxitems
DataTemplate wäre sicher die schönste Lösung, wollte solange da nur Text drinsteht aber noch nicht damit anfangen (in meiner Antwort).
Sobald man da tatsächlich Datenobjekte reinstecken will, die mehr Info als nur einen String haben kommt man aber um das Template ohnehin nicht mehr wirklich herum. Vor allem sind die recht schön deklarativ zu definieren und anzupassen. Unterm Strich also die Empfehlung: ließ dich da mal ein, is eines der praktischsten Silverlight Features.