2012-07-21 11 views
15

Chcę zmienić odstępy między elementami w ListView (? Może powinienem użyć innego widoku-elementowa) Kod wygląda następująco:Windows8 ListView i przestrzeń pomiędzy elementami

<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> 

chcę naśladować jak najbardziej normalne stackpanel (który może owijać elementy). Obecnie spacje (przestrzeń pozioma) pomiędzy przedmiotami są zdecydowanie za duże. Moje poprzednie pytanie ->Windows 8 WrapPanel

góry dzięki

Odpowiedz

25

Konieczne będzie wprowadzenie zmian w domyślnym szablonie. Jeśli chcesz tylko dokonać prostych zmian, takich jak wyściółka i marże to można to zrobić: (testowany kod i powinno działać)

  <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> 

Aby uzyskać większą kontrolę zrobić kopię całego domyślnym szablonie wybierając listviewitem w projektancie i prawicowy. wybierz szablon edycji, edytuj kopię. Spowoduje to wygenerowanie domyślnego szablonu i możesz wprowadzić tam zmiany. Możesz zrobić to samo dla listviewcontainer. Możesz to również zrobić, używając Blend.

I've added a description and images here (how you can edit a default template)

Daj mi znać, jak to działa, a jeśli masz więcej pytań! Powodzenia!

EDIT:

MemeDeveloper wymienionych poniżej, które wciąż miał problemy i rozwiązać go przez szczypanie innego Ustawienia- Wysłał kod i odpowiedź tutaj, upewnij się, aby spojrzeć.

+0

Dzięki za pomoc :) Jeszcze jedno pytanie. Byłem prawie pewien, że powinno to być zrobione na jego sposób, ale nie mogłem znaleźć żadnego narzędzia, w którym mógłbym edytować te style. Jak mogę to zrobić na przykład w Blenderze? –

+2

Wysłałem posta na blogu, na którym umieściłem opis i zdjęcia, aby dowiedzieć się, jak to zrobić w VS lub mieszance :) Mam nadzieję, że to pomoże! Nie wahaj się zadać więcej pytań. Link: http://www.irisclasson.com/2012/07/22/example-winrtmetro-app-how-to-edit-default-template-in-visual-studio- 2012-and-blend/ –

+0

Wow, niesamowite! Bardzo dziękuję :) –

2

trzeba zmieniać właściwość ListBox.ItemContainerTemplate. Projektant wizualny Blend lub VS pomaga wyodrębnić go w celu modyfikacji.

+0

... tak, a szczególnie w tym zakresie właściwości ContentMargin i Padding ListViewItemPresenter – MemeDeveloper

16

O ile wiem (windows8.1 sklep XAML app), po ustawieniu tych dwóch zero

<ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="Padding" Value="0"/> 
        <Setter Property="Margin" Value="0"/> 

miałem jeszcze frustrujące luki I pozornie nie mógł się pozbyć.

Korzystanie marginesy ujemne tutaj może zrobić dla ciebie, ale ... jej hacky, ciężko pracować, a nie zawsze doprowadzi do oczekiwanych rezultatów

Po ciągnięcie moich włosów znalazłem problem został rozwiązany z tych facetów tj

ContentMargin = "0" padding = "0"

W ListViewItemPresenter następująco:

 <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> 

nadzieję, że ratuje kogoś z rozbijając wielokrotnie swoją głowę na swojej klawiaturze;)

+1

Uratowałeś mój dzień, kolego :-) :-). Próbowałem to znaleźć od wielu dni. –

+0

Spędziłem wiele godzin i spędziłem wiele dni, jeśli tego nie zidentyfikuję! –

+0

Nadal potrzebowałem ujemnego ContentMargin, aby jeszcze bardziej zmniejszyć margines. –

1

rozwiązanie dla eleminating marże w GridView przedmiotów dla Windows 8.1 App Store. Zainspirowany powyższym rozwiązaniem 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> 
7

myślę prawidłowe ItemContainerStyle Property zmodyfikować tutaj jest MinHeight, a nie margines lub wypychania.

Powiązane problemy