【发布时间】:2023-04-07 01:59:02
【问题描述】:
我有以下问题。
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 中根据 boolflag 在绿色和蓝色之间切换 HighlightBrushKey 的颜色,但我没有成功。
你能帮我举几个例子吗?
【问题讨论】: