ListView中项目之间的分割线。

4
我想在ListView中的项目之间插入分隔符,就像下面的图片一样。 Sample 有两个问题:
1. 如果我将其添加为边框到ItemTemplate中的项目底部,则最后一个项目将具有分隔符,而它不应该有。 2. 如果我找到一种方法在ItemTemplate之外添加分隔符,我该如何将其与标签对齐?
2个回答

2
你需要使用 DataTemplateSelector 来完成此操作。首先,你需要创建两个 DataTemplate
例如:在一个简单的 ItemsControl 中,我想向你展示一个字符串列表,我的两个 DataTemplate 如下所示。
<Page.Resources>  
    <DataTemplate x:Name="AllItems">  
        <Border BorderBrush="{StaticResource SystemControlBackgroundBaseLowBrush}" BorderThickness="0,0,0,2">  
            <TextBlock Text="{Binding ''}" Padding="10" Margin="10,0" />  
        </Border>  
    </DataTemplate>  
    <DataTemplate x:Name="LastItems">  
            <TextBlock Text="{Binding ''}" Padding="10" Margin="10,0" />  
    </DataTemplate>  
</Page.Resources>

现在我创建了一个 DataTemplateSelector 并检查我需要应用 DataTemplate 的项目是否是最后一个。

public class ItemsDataTemplateSelector: DataTemplateSelector
{
    public DataTemplate AllItems { get; set; }
    public DataTemplate LastItems { get; set; }

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        DataTemplate _returnTemplate = new DataTemplate();
        var itemsControl = ItemsControl.ItemsControlFromItemContainer(container);
        if (itemsControl.IndexFromContainer(container) == (itemsControl.ItemsSource as List<String>).Count-1)
        {
            _returnTemplate = LastItems;
        }
        else
        {
            _returnTemplate = AllItems;
        }
        return _returnTemplate;
    }
}

现在我的ItemsControl实现将会是:
<ItemsControl x:Name="listView">  
    <ItemsControl.ItemTemplateSelector>  
        <local:ItemsDataTemplateSelector AllItems="{StaticResource AllItems}" LastItems="{StaticResource LastItems}" />  
    </ItemsControl.ItemTemplateSelector>  
</ItemsControl>

这是我如何将ItemsSource设置为ItemsControl的方法。
List<String> items = new List<string>();  
for (int i = 1; i <= 5; i++)  
{  
    items.Add("Item " + i.ToString());  
}  
listView.ItemsSource = items;  

以下是您的输出结果。您可以看到,最后一项没有边框 Border

enter image description here


1
然而,这几乎不可重复使用。 - SuperJMN

-2

在listView中使用XML的Divider属性。希望它能满足您的要求。例如,

在activity_main.xml中:

    <ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/buttn"
    android:divider="@color/Divider"
    android:dividerHeight="2dp"
    android:id="@+id/listview"/>

在color.xml文件中:

 <resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="Divider">#085411</color></resources>

4
这个问题是关于UWP的,不是关于Android。 - AVK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接