Unterschiedliche Farben beim selektieren von Items in einer ListView

stiernacken007

Grünschnabel
Hallo,
ich habe folgendes Problem.

Ich habe eine ListView, in welcher, abhängig von einem Boolflag, die Background Color der Items entweder LightGreen oder White ist.

listview.jpg


Window1.xaml
Code:
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ListView" Height="300" Width="300">
    
    <Window.Resources>
        
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=BoolFlag}" Value="True">
                    <Setter Property="Background" Value="LightGreen" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
               
    </Window.Resources>
    
    <StackPanel>
        <ListView ItemsSource="{Binding Path=Personen}" SelectionMode="Single" SelectionChanged="ListViewSelectionChanged">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Vorname}" Header="Vorname" />
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Nachname}" Header="Nachname" />
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Alter}" Header="Alter" />
                    <GridViewColumn DisplayMemberBinding="{Binding Path=BoolFlag}" Header="BoolFlag" />
                </GridView>
            </ListView.View>
        </ListView>
    </StackPanel>
</Window>

Window1.xaml.cs
Code:
public partial class Window1 : Window
    {
        private IList<Person> _personen = new List<Person>();

        public Window1()
        {
            _personen.Add(new Person 
                    {
                        Vorname = "Max",
                        Nachname = "Mustermann",
                        Alter = 18,
                        BoolFlag = false,
                    });

            _personen.Add(new Person 
                    {
                        Vorname = "Karl",
                        Nachname = "Mayer",
                        Alter = 27,
                        BoolFlag = true,
                    });

            _personen.Add(new Person 
                    {
                        Vorname = "Josef",
                        Nachname = "Huber",
                        Alter = 38,
                        BoolFlag = false,
                    });

            DataContext = this;

            InitializeComponent();
        }

        public IList<Person> Personen
        {
            get
            {
                return _personen;
            }
        }

        private void ListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            Person person = e.AddedItems[0] as Person;

            if (person != null)
            {
                if (person.BoolFlag)
                {
                    this.Resources[SystemColors.HighlightBrushKey] = Brushes.Green;
                }
                else
                {
                    this.Resources[SystemColors.HighlightBrushKey] = Brushes.RoyalBlue;
                }
            }
        }
    }

Person.cs
Code:
public class Person
    {
        public string Vorname { get; set; }

        public string Nachname { get; set; }

        public int Alter { get; set; }

        public bool BoolFlag { get; set; }
    }

Jetzt möchte ich, wenn ich ein Item selektiere, dessen Farbe ebenfalls abhängig von dem Boolflag auf Green bzw. Blue setzen.

Im Code-Behind funktioniert das schon recht gut, indem einfach der Default-Wert von HighlightBrushKey überschrieben wird:
Code:
private void ListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            Person person = e.AddedItems[0] as Person;

            if (person != null)
            {
                if (person.BoolFlag)
                {
                    this.Resources[SystemColors.HighlightBrushKey] = Brushes.Green;
                }
                else
                {
                    this.Resources[SystemColors.HighlightBrushKey] = Brushes.RoyalBlue;
                }
            }
        }
    }

Mein eigentliches Problem ist nun, dass ich das ganze im XAML definieren will.

Mit
Code:
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
kann ja der Default-Wert in XAML überschrieben werden.
Jedoch gild dieser Wert dann für alle selektierten Items.

Meine Frage ist jetzt:
Wie kann ich im XAML den Default-Wert von HighlightBrushKey, abhängig vom Boolflag, mit einer eigenen Farbe überschreiben?

Ich hoffe, ich habe mich verständlich ausgedrückt und ihr könnt mir weiter helfen.
Besten Dank schonmal.
 
Zurück