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.



Window1.xaml
Code :
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
<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 :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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 :
1
2
3
4
5
6
7
8
9
10
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 :
1
<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.