我有以下问题。在XAML中更改HighlighBrushKey的颜色
ListView中的背景色设置为LightGreen或White,无论boolflag是true还是false。
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,但我没有成功。
愿你能帮助我,给我一些例子吗?
让我的一天:) 谢谢! 我太专注于那个HighlightBrushKey,我觉得太复杂了。现在它可以工作。 – phil 2010-04-19 15:58:36
很高兴帮助:) – Amsakanna 2010-04-20 04:40:51