列表视图项目UWP的备用颜色 [英] Alternate color for listview item UWP
问题描述
我有一堂课,以替代项目的背景颜色,但如果我删除项目,则背景颜色不会更新. 删除项目后是否可以刷新背景颜色?
I have a class to color alternate the background of item, but if I delete a item, the background color does not update. Is there a way to refresh the background color after deleting an item?
备用颜色的代码. 类列表视图:
The code for alterante color. class listview:
public class AlternatingRowListView : ListView
{
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
var listViewItem = element as ListViewItem;
if (listViewItem != null)
{
var index = IndexFromContainer(element);
if (index % 2 == 0)
{
listViewItem.Background = new SolidColorBrush(Colors.LightBlue);
}
else
{
listViewItem.Background = new SolidColorBrush(Colors.Transparent);
}
}
}
}
代码xaml:
<local:AlternatingRowListView x:Name="listview">
<ListViewItem>item 1</ListViewItem>
<ListViewItem>item 2</ListViewItem>
<ListViewItem>item 3</ListViewItem>
<ListViewItem>item 4</ListViewItem>
<local:AlternatingRowListView.ItemTemplate>
<DataTemplate>
</DataTemplate>
</local:AlternatingRowListView.ItemTemplate>
</local:AlternatingRowListView>
提前谢谢.
推荐答案
您只需要稍微扩展一下已经扩展的AlternatingRowListView
控件即可实现所需的功能.
You just need to extend your already extended AlternatingRowListView
control a bit to achieve what you need.
您可以通过订阅Items
的VectorChanged
事件来监视何时从列表中删除某项,然后您只需遍历以下所有已实现项 (在视觉上)删除的项目并相应地更改其背景颜色.
You can monitor whenever an item gets removed from the list by subscribing to the VectorChanged
event of the Items
, and then you just loop through all the already realized items below(visually) the removed item and change their background colors accordingly.
类似的事情会发生-
public AlternatingRowListView()
{
DefaultStyleKey = typeof(ListView);
Items.VectorChanged += OnItemsVectorChanged;
}
private void OnItemsVectorChanged(IObservableVector<object> sender, IVectorChangedEventArgs args)
{
// When an item is removed from the list...
if (args.CollectionChange == CollectionChange.ItemRemoved)
{
var removedItemIndex = (int)args.Index;
// We don't really care about the items that are above the deleted one, so the starting index
// is the removed item's index.
for (var i = removedItemIndex; i < Items.Count; i++)
{
if (ContainerFromIndex(i) is ListViewItem listViewItem)
{
listViewItem.Background = i % 2 == 0 ?
new SolidColorBrush(Colors.LightBlue) : new SolidColorBrush(Colors.Transparent);
}
// If it's null, it means virtualization is on and starting from this index the container
// is not yet realized, so we can safely break the loop.
else
{
break;
}
}
}
}
这篇关于列表视图项目UWP的备用颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!