更改单个列表的颜色<;T>;项目
本文关键字:lt gt 项目 颜色 单个 列表 | 更新日期: 2023-09-27 18:22:38
我正试图在触发时更改项目的字体颜色,但我一生都无法找出语法来更改单个项目。我的代码:
C#:
public class Person
{
public string Name { get; set; }
public string Mode { get; set; }
public string Time { get; set; }
}
List<Person> personObjects = new List<Person>();
personObjects.Add(new Person()
{
Name = testVariable,
Mode = "Test",
Time = testString1,
});
PersonListView.ItemsSource = personObjects;
XAML:
<ListView x:Name="PersonListView"
HorizontalAlignment="Left"
Height="258"
Margin="5,268,0,0"
VerticalAlignment="Top"
Width="165"
FontSize="10"
ButtonBase.Click="GridViewColumnHeaderClickedHandler" >
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Height" Value="16" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="Person"
Width="94"
DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Time"
Width="44"
DisplayMemberBinding="{Binding Time}"/>
</GridView>
</ListView.View>
</ListView>
我尝试过使用ListViewItem
属性,但没有成功
我试过:
foreach (Person item in onCallListView.Items)
{
if(trigger)
{
item.Foreground = Brushes.Red;
}
}
我得到的最接近的是在XAML中更改它:
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Foreground" Value="Red" />
</Style>
但它会更改列表中的所有项目,我如何单独更改这些项目
我有一个可以直接改变颜色的标签:
int secondsInMode = Convert.ToInt32(pullsDataFromString);
if (secondsInMode > 15 * 60)
{
personStatusLabel.Foreground = Brushes.Red;
}
我可以使用一个类似于的布尔值吗
public bool RED = false;
if (secondsInMode > 15 * 60)
{
RED = true;
}
并且是否由布尔值触发DataTrigger?
您可以这样触发它:
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Height" Value="16" />
<DataTrigger Binding="{Binding Time}" Value="456">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style>
如果你的trigger
不仅仅是some_property == some_value
,那么你要么需要创建自己的ValueConverter
(见下面的编辑)
如果您绑定的属性也可以动态更改,那么您还需要在属性上实现PropertyChanged
-请参阅http://msdn.microsoft.com/en-us/library/ms743695(v=vs.110).aspx
祝你好运!任何问题都可以问。
添加-如何制作转换器:
如果你需要一个更复杂的触发器,你可以这样做:
C#:
public class TimeStringToIsLateConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
// Do the conversion from your Time (ie value) to your "should the text be red" bool
return ((string)value) == "456";
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
// Not needed!
return null;
}
}
XAML:
在顶部添加您的本地命名空间,例如:
<Window ...
xmlns:l="clr-namespace:WpfApplication4"
... />
然后有一些东西,例如:
<ListView ...>
<ListView.Resources>
<l:TimeStringToIsLateConverter x:Key="TimeColourConverter" />
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Height" Value="16" />
<Style.Triggers>
<DataTrigger Binding="{Binding Time, Converter={StaticResource TimeColourConverter}}" Value="True">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
...