2010-04-19 6 views
1

J'ai le problème suivant.Changement de couleur de HighlighBrushKey dans XAML

La couleur d'arrière-plan d'un ListView est définie sur LightGreen ou White, si un fanion est vrai ou faux.

Example Screen

Window1.xaml:

<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> 

Window1.xaml.cs:

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:

public class Person 
{ 
    public string Vorname { get; set; } 

    public string Nachname { get; set; } 

    public int Alter { get; set; } 

    public bool BoolFlag { get; set; } 
} 

Maintenant, je veux définir la couleur de surbrillance de l'élément sélectionné, en fonction du boolflag. Dans code-behind Je le fais avec:

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; 
      } 
     } 
    } 
} 

Cela fonctionne bien, mais maintenant je veux définir le code ci-dessus dans le fichier XAML.

Avec

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" /> 

je peux remplacer la valeur par défaut. Cependant, cela fonctionne, mais la couleur est définie sur Vert pour tous les éléments sélectionnés. J'ai essayé différentes manières de changer la couleur de HighlightBrushKey entre le vert et le bleu dans XAML, selon le boolflag, mais je n'ai pas réussi.

Pouvez-vous m'aider et me donner des exemples?

Répondre

1

Je ne sais pas pourquoi highlightBrushKey n'est pas si flexible. Pour une raison similaire, je suis passé à une autre façon de définir la couleur de fond des éléments sélectionnés en utilisant l'utilisation de sa bordure. Vous pouvez jeter un oeil à ce http://vbcity.com/blogs/xtab/archive/2009/06/28/background-color-for-wpf-listbox-selected-item.aspx

+0

Fait ma journée :) Merci! J'étais trop concentré sur cette HighlightBrushKey et je pensais que c'était trop complexe. Maintenant ça marche. – phil

+0

Heureux que ça a aidé :) – Amsakanna

Questions connexes