Autor Beitrag
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 22.04.08 17:15 
Hallo!

Nachdem mein erstes GUI-Design auf Grund von Schwierigkeiten 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:
ausblenden volle Höhe 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Christian S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 25.04.08 23:37 
*schieb* *drück*

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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: .
Einloggen, um Attachments anzusehen!
Christian S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Christian S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 ;) .