2017-02-08 3 views
2

Я хотел бы вставить разделитель между элементами в ListView, как на изображении ниже.Разделитель ListView между элементами

Sample

Есть 2 проблемы:

  1. Если добавить его (как границы) в нижней части пункта в ItemTemplate, последний элемент будет иметь сепаратор, и он должен не.
  2. Если я найду способ добавить разделитель за пределами ItemTemplate, как бы выровнять его с ярлыками?

ответ

3

Для этого вам необходимо использовать DataTemplateSelector. Сначала вам нужно создать 2

Например: В простой ItemsControl, который я хочу показать вам список String, My Two 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

+0

Однако это вряд ли можно использовать повторно. – SuperJMN

-1

атрибут Использование Делитель в XML в listView.I надеюсь, что он выполняет свой requirment.For пример,

В 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> 
+2

речь идет о UWP. Не Android – AVK

Смежные вопросы