Entwickler-Ecke
WPF / Silverlight - Style für zuerst markiertes Item in Listbox
Christian S. - Di 22.04.08 17:15
Titel: Style für zuerst markiertes Item in Listbox
Hallo!
Nachdem mein erstes GUI-Design auf Grund von
Schwierigkeiten [
http://www.c-sharp-forum.de/topic_Tabs+in+ListboxItems+synchronisieren_82563.html] nicht funktionierte, bastle ich nun an etwas Neuem. Ich habe folgende Situation:
- eine Listbox, welche Thumbnails von Bildern enthält
- daneben verschiedene Eingabefelder z.B. für Titel, Beschreibung, Tags. Da kann man dann für das ausgewählte Bild diese Eingaben vornhemen
- die Möglichkeit, wenn mehrere Items markiert sind, vom zuerst markierten (=aktiven) Item zu allen anderen markierten Items die Einstellungen zu kopieren
Was ich nun möchte, ist, dass das aktive (also zuerst markierte) Item anders hervorgehoben wird als die anderen markierten Items. Damit man sieht, von welchem Item man die Einstellungen kopiert.
Aktuell sieht der Style für ein ListBoxItem so aus:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| <Style x:Key="ImageListBoxItem" TargetType="{x:Type ListBoxItem}"> <Setter Property="SnapsToDevicePixels" Value="true"/> <Setter Property="OverridesDefaultStyle" Value="true"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListBoxItem"> <Border Name="Border" Padding="2" BorderThickness="1" BorderBrush="{x:Null}" SnapsToDevicePixels="true"> <ContentPresenter Name="theContent" /> </Border> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="true"> <Setter TargetName="Border" Property="Background" Value="{StaticResource SelectedBackgroundBrush}"/> </Trigger> <Trigger Property="IsSelected" Value="true"> <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource HighlightBorderBrush}"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> |
Der zweite, aktuell noch mit dem Ersten identische, Trigger soll derjenige sein, der auf das aktive Item "anspringen". Ideen? :)
Kann man in dem Style abfragen, ob das Item = SelectedItem der Listbox ist? :gruebel:
Grüße
Christian
Christian S. - Fr 25.04.08 23:37
*schieb* *drück*
Kha - Sa 26.04.08 11:44
Ich weiß nicht wirklich, ob das der einfachste Weg ist (man kann die DP wegen des Bindings wohl nicht einmal readonly setzen), aber wenigstens funktioniert's im Gegensatz zu letztem Mal :mrgreen: .
Christian S. - Sa 26.04.08 21:57
Hallo!
Danke für das Demo-Projekt. :-)
Aus irgendeinem Grund funktioniert das zwar in meinem Projekt noch nicht, aber das kann nur noch eine Kleinigkeit sein. Daher: Problem gelöst. Thanks :zustimm:
Grüße
Christian
Christian S. - So 27.04.08 15:38
Kurz noch die Ergänzung, die ich bei mir machen musste:
Wenn man in die Listbox keine Objekte steckt, die bereits den Typ ListBoxItemEx haben, sondern z.B. eine eigene Klasse "MyClass", dann liefert "myListBox.SelectedItem" ein Objekt der Klasse MyClass zurück. Daher muss man in der OnVisualParentChanged-Methode als ConverterParameter nicht this, sondern this.DataContext benutzen. Kann man natürlich noch dahingehend verbessern, dass man erst den Typ von SelectedItem prüft und dann entweder this oder this.DataContext übergibt.
//edit: Besser ist es, nicht den Typ von SelectedItem zu prüfen (könnte ja null sein), sondern this.DataContext auf null zu prüfen.
Kha - So 27.04.08 16:41
Stümmt, das habe ich nicht bedacht. Mit parent.ContainerFromElement(value) == parameter sollte es (ungetestet) auch ohne Verzweigung funktionieren. Dem Converter müsste man dann aber noch den Parent mitgeben und am Besten umbennen ;) .
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!