Laden...

ListViewItem - MouseOver und Selected - Farbe ändern

Erstellt von Max1809 vor 11 Jahren Letzter Beitrag vor 11 Jahren 7.513 Views
M
Max1809 Themenstarter:in
67 Beiträge seit 2011
vor 11 Jahren
ListViewItem - MouseOver und Selected - Farbe ändern

Hi,

ich möchte in meinen ListViews die Farbe eines Items ändern, wenn der Anwender ein Item auswählt bzw. auch wenn er nur mit der Maus drüber geht.

Nun dachte ich, ich mach das über die Application Resources in meiner App.xaml. Nun ja ... irgendwie tut sich da nichts.

Erst wenn ich den Code direkt in jeder einzelnen ListView habe, passiert das, was ich will.

So siehst bei mir in der App.xaml aus:

        <Style TargetType="{x:Type ListViewItem}">
            <Style.Triggers>
                <Trigger Property="ListViewItem.IsMouseOver" Value="True">
                    <Setter Property="Foreground" Value="Orange"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
        

Das funktioniert leider nicht.

Das hingegen schon:

 <ListView.Resources>
                <Style TargetType="{x:Type ListViewItem}">
                    <EventSetter Event="MouseDoubleClick" Handler="OrtsteileListViewDoppelklick" />
                    <EventSetter Event="MouseLeftButtonUp"  Handler="OrtsteileListViewKlick" />

                    <Style.Triggers>
                        <Trigger Property="ListViewItem.IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Orange"></Setter>
                        </Trigger>
                    </Style.Triggers>
                    
                </Style>
                
            </ListView.Resources>

Ich habe in jeder meiner ListViews solche EventSetter drin.

Kann es sein, dass wenn ich einen eigenen Style in meinen ListViews habe (also in jedem Fenster einzeln, da die EventSetter immer verschiedene Handler haben), der Style aus der App.xaml garnicht mehr verwendet wird? 😦

Ich danke euch schonmal.

5.657 Beiträge seit 2006
vor 11 Jahren

Hi Max1809,

probier mal das BasedOn-Attribute zu verwenden:

        <Style TargetType="{x:Type ListViewItem}" BasedOn="{x:Type ListViewItem}">
            <Style.Triggers>
                <Trigger Property="ListViewItem.IsMouseOver" Value="True">
                    <Setter Property="Foreground" Value="Orange"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
        

Christian

Weeks of programming can save you hours of planning

M
Max1809 Themenstarter:in
67 Beiträge seit 2011
vor 11 Jahren

Danke für deine schnelle Antwort.

Leider funktioniert auch das nicht. 😦

1.378 Beiträge seit 2006
vor 11 Jahren

Das BasedOn muss in den "darunterliegenden" Styles angegeben werden. Die Appl.xaml ist ja die höchste Ebene - wenn ein neuer Style den alten übernehmen soll dann braucht man dazu das BasedOn.

Auch muss man beachten, dass ein Property durch einen Style nicht mehr gesetzt wird, wenn dieses bereits durch einen manuellen Wert gesetzt wurde.

Lg, XXX

M
Max1809 Themenstarter:in
67 Beiträge seit 2011
vor 11 Jahren

Klingt logisch. Ich hab es versucht.

In der App.xaml habe ich nichts verändert.

In meiner ListView sieht es nun so aus:

  <Style TargetType="{x:Type ListViewItem}" BasedOn="{x:Type ListViewItem}" >
                    <EventSetter Event="MouseDoubleClick" Handler="OrtsteileListViewDoppelklick" />
                    <EventSetter Event="MouseLeftButtonUp" Handler="OrtsteileListViewKlick" />
                    <!--<Style.Triggers>
                        <Trigger Property="ListViewItem.IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Orange"></Setter>
                        </Trigger>                       
                    </Style.Triggers>-->
                </Style>

Leider bekomme ich folgende Fehlermeldung:> Fehlermeldung:

'Set property 'System.Windows.Style.BasedOn' threw an exception.' Line number '42' and line position '24'.

Und dazu die Innerexpection:

{"Unable to cast object of type 'System.RuntimeType' to type 'System.Windows.Style'."}

1.378 Beiträge seit 2006
vor 11 Jahren

Die Verwendung des Properties hättest du dir auch ergooglen können - in BasedOn wird natürlich ein anderer Style erwartet, welchen du zB mit StaticResource einbinden kannst.

Also


                 <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListViewItem}}" >
                    <EventSetter Event="MouseDoubleClick" Handler="OrtsteileListViewDoppelklick" />
                    <EventSetter Event="MouseLeftButtonUp" Handler="OrtsteileListViewKlick" />
                    <!--<Style.Triggers>
                        <Trigger Property="ListViewItem.IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Orange"></Setter>
                        </Trigger>
                    </Style.Triggers>-->
                </Style>

Lg, XXX

M
Max1809 Themenstarter:in
67 Beiträge seit 2011
vor 11 Jahren

Oh, aber natürlich. 🙁

Danke dir, darauf hätte ich selbst kommen können. 👍

Hinweis von gfoidl vor 11 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 2.3