WindowsView ListView и пространство между элементами
Я хочу изменить интервал между элементами в listView (может быть, я должен использовать другой элемент View?) Код выглядит следующим образом:
<ListView SelectionMode="None" HorizontalContentAlignment="Left" >
<ListView.Items>
<TextBlock Text="Item 1" />
<TextBlock Text="Item 2" />
<TextBlock Text="Item 3" />
<TextBlock Text="Item 4" />
</ListView.Items>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal" HorizontalChildrenAlignment="left"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
Я хочу подражать как можно больше обычной панели стека (wchich может обернуть элементы). В настоящее время пространство (горизонтальное пространство) между элементами слишком велико. Мой предыдущий вопрос → Windows 8 WrapPanel
Заранее спасибо
Ответы
Ответ 1
Вам нужно будет внести изменения в шаблон по умолчанию. Если вы просто хотите сделать простые изменения, такие как заполнение и поля, вы можете сделать это: (протестировал код и должен работать)
<ListView>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal" HorizontalChildrenAlignment="left"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Padding" Value="0"/>
<Setter Property="Margin" Value="0"/>
</Style>
</ListView.ItemContainerStyle>
<ListViewItem>
<TextBlock Foreground="Wheat">hej</TextBlock>
</ListViewItem>
<ListViewItem>
<TextBlock Foreground="Wheat">hej</TextBlock>
</ListViewItem>
</ListView>
Для большего контроля сделайте копию всего шаблона по умолчанию, выбрав listviewitem в дизайнере и щелкните правой кнопкой мыши. выберите шаблон редактирования, отредактируйте копию. Это создаст шаблон по умолчанию, и вы сможете внести там свои изменения. Вы можете сделать то же самое для listviewcontainer. Вы также можете сделать это, используя Blend.
Я добавил описание и изображения здесь (как вы можете редактировать шаблон по умолчанию)
Сообщите мне, как это происходит, и если у вас есть еще вопросы! Удачи!
EDIT:
MemeDeveloper упомянул ниже, что у него все еще были проблемы и он решил его, изменив некоторые другие свойства - он разместил код и ответ здесь, обязательно взгляните.
Ответ 2
Насколько я знаю (приложение xaml store8.1), после установки этих двух в нуль
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Padding" Value="0"/>
<Setter Property="Margin" Value="0"/>
У меня все еще были неприятные пробелы, от которых я, казалось бы, не мог избавиться.
Использование отрицательных полей здесь может сделать это для вас, но... его хакерство, трудное для работы и не всегда приведет к ожидаемым результатам
Потянув мои волосы, я обнаружил, что проблема решена с этими парнями, т.е.
ContentMargin = "0" Padding = "0"
В ListViewItemPresenter:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Padding" Value="0" />
<Setter Property="Margin" Value="0" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="VerticalContentAlignment" Value="Top" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<ListViewItemPresenter ContentMargin="0" Padding="0" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
Надеюсь, что кто-то еще не сможет разбить их голову на клавиатуре;)
Ответ 3
Я думаю, что правильное свойство ItemContainerStyle для модификации здесь MinHeight, а не Margin или Padding.
Ответ 4
Вам нужно отредактировать свойство ListBox.ItemContainerTemplate. Визуальный дизайнер Blend или VS помогает извлечь его для модификации.
Ответ 5
Решение для выравнивания полей в элементах GridView для приложения Windows 8.1 Store. Вдохновленный вышеуказанным решением ListView.
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GridViewItem">
<GridViewItemPresenter ContentMargin="0" Padding="0"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GridView.ItemContainerStyle>