2010-04-19 37 views
1

我有以下问题。在XAML中更改HighlighBrushKey的颜色

ListView中的背景色设置为LightGreen或White,无论boolflag是true还是false。

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

现在我要设置所选项目的高亮颜色,具体取决于boolflag。 代码隐藏我这样做有:

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

这工作得很好,但现在我想在XAML文件来定义上面的代码。

随着

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

我可以覆盖默认值。但是,它可以工作,但所有选定项目的颜色都设置为绿色。我试过不同的方法来切换XAML中的绿色和蓝色之间的HighlightBrushKey颜色,具体取决于boolflag,但我没有成功。

愿你能帮助我,给我一些例子吗?

回答

1

不知道为什么highlightBrushKey不那么灵活。由于类似的原因,我开启了通过使用其边框来设置所选项目背景颜色的替代方式。你可以看看这个http://vbcity.com/blogs/xtab/archive/2009/06/28/background-color-for-wpf-listbox-selected-item.aspx

+0

让我的一天:) 谢谢! 我太专注于那个HighlightBrushKey,我觉得太复杂了。现在它可以工作。 – phil 2010-04-19 15:58:36

+0

很高兴帮助:) – Amsakanna 2010-04-20 04:40:51