2012-07-21 16 views
15

quiero cambiar el espaciado entre elementos en ListView (? Tal vez debería utilizar otra vista-elemento) código es el siguiente:Windows8 ListView y el espacio entre los elementos

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

quiero imitar lo más posible la normalidad stackpanel (que puede envolver elementos). Actualmente los espacios (espacio horizontal) entre los elementos son demasiado grandes. Mi pregunta anterior ->Windows 8 WrapPanel

Gracias de antemano

Respuesta

25

Deberá realizar cambios en la plantilla predeterminada. Si lo que desea es hacer cambios simples, como el relleno y los márgenes entonces usted puede hacer esto: (probado el código y debe trabajar)

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

Para un mayor control crea una copia de toda la plantilla por defecto seleccionando un ListViewItem en el diseñador y haciendo clic derecho. seleccione editar plantilla, editar copia. Esto generará la plantilla predeterminada y puede hacer sus cambios allí. Puede hacer lo mismo para listviewcontainer. También puedes hacer esto usando Blend.

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

Déjame saber cómo va, y si usted tiene más preguntas! ¡Buena suerte!

EDIT:

MemeDeveloper se menciona más adelante que todavía tenía problemas y lo resolvió mediante la deformación de alguna otra propiedades- que publicó un código y una respuesta aquí, asegúrese de echar un vistazo.

+0

Gracias por su ayuda :) Una pregunta más. Estaba casi seguro de que debería hacerse a su manera, pero no pude encontrar ninguna herramienta donde pudiera editar esos estilos. ¿Cómo puedo hacer esto en Blend, por ejemplo? –

+2

He publicado una publicación de blog en la que he incluido descripciones e imágenes sobre cómo hacerlo en VS o mezclar :) ¡Espero que ayude! No dude en hacer más preguntas, etc. Enlace: http://www.irisclasson.com/2012/07/22/example-winrtmetro-app-how-to-edit-default-template-in-visual-studio- 2012-and-blend/ –

+0

Guau, ¡increíble! Muchas gracias :) –

2

necesita editar la propiedad ListBox.ItemContainerTemplate. El diseñador visual Blend o VS ayuda a extraerlo para modificarlo.

+0

... sí y particularmente, dentro de él las propiedades ContentMargin y Padding de ListViewItemPresenter – MemeDeveloper

16

Por lo que yo sé (windows8.1 tienda xaml aplicación), después de ajustar estos dos a cero

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

todavía tenía lagunas frustrantes que aparentemente no podía deshacerse de él.

El uso de márgenes negativos aquí podría hacerlo por usted ... pero su hacky, difícil de trabajar, y que no siempre conducen a los resultados esperados

Después de tirar de mi pelo que me encontré con el problema se resolvió con estos tipos, es decir,

ContentMargin = "0" Relleno = "0"

En el ListViewItemPresenter de la siguiente manera:

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

esperanza que salva a alguien de aplastar su cabeza repetidamente en su teclado;)

+1

Me salvaste el día, amigo :-) :-). Estuve tratando de encontrar esto desde hace muchos días. –

+0

¡He pasado horas en esto y habría pasado días si no hubiera encontrado esto! –

+0

Aún necesitaba un ContentMargin negativo para reducir aún más los márgenes. –

1

Solución para eleminating márgenes en artículos de GridView para Windows 8.1 App Store. Inspirado por la solución ListView anterior.

<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

creo que la correcta ItemContainerStyle la propiedad de modificar aquí es MinHeight, no Margen o relleno.

Cuestiones relacionadas