2011-04-13 13 views
9

Estoy tratando de poner líneas verticales entre las columnas en ListViewItem. Intenté las soluciones dadas. Pero no está funcionando. ¿Alguien puede ayudarme a resolver esto? He creado un estilo separado para ListViewItem. ¿Debo agregar alguna propiedad en los estilos?Cómo poner líneas verticales para listviewitem en WPF

El código es como esto

<ListView x:Key="ListView1" ItemContainerStyle="{DynamicResource ListViewItemStyle1}"> 
<ListView.View> 
    <GridView> 
     <GridViewColumn Header="{TemplateBinding GridView.ColumnCollection}"> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
        <Border BorderBrush="#FF000000" BorderThickness="1,0,0,0" Margin="-6,-2,-6,-2"> 
         <StackPanel Margin="6,2,6,2"> 
          <TextBlock Text="{TemplateBinding Content}"/> 
         </StackPanel> 
        </Border> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    </GridView> 
</ListView.View> 
</ListView> 

, literalmente, debería funcionar, pero no su trabajo. No soy capaz de añadir líneas verticales utilizando el código anterior ..

+2

¿Puedes ver 'Contenido' en tu TextBlock? – Markus

Respuesta

11

He aquí una pequeña muestra con un ListView y dos columnas. El truco es definir un DataTemplate con un borde, estirar el borde para llenar la celda (ver ItemContainerStyle, Style ListViewItem, H/V-ContentAligment = Stretch) y mostrar (en este caso) la derecha y la línea inferior (por BorderThickness = "0,0,1,1"). Para su caso de uso BorderThickness = "0,0,1,0"

<ListView ItemsSource="{Binding}"> 
     <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
       <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter> 
      </Style> 
     </ListView.ItemContainerStyle> 
     <ListView.Resources> 
      <DataTemplate x:Key="NameTemplate"> 
       <Border BorderThickness="0,0,1,1" BorderBrush="LightGray" Margin="-6,0,-6,0"> 
        <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Name}" VerticalAlignment="Center" TextTrimming="CharacterEllipsis"></TextBlock> 
       </Border> 
      </DataTemplate> 
      <DataTemplate x:Key="ActualValueTemplate"> 
       <Border BorderThickness="0,0,1,1" BorderBrush="LightGray" Margin="-6,0,-6,0"> 
        <TextBlock Name="ActualValueTextBlock" Margin="2,1,1,1" Text="{Binding TextMeasuredValue}" VerticalAlignment="Center"></TextBlock> 
       </Border> 
      </DataTemplate> 
     </ListView.Resources> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn Header="Name" CellTemplate="{StaticResource NameTemplate}"></GridViewColumn> 
        <GridViewColumn Header="Actual Value" CellTemplate="{StaticResource ActualValueTemplate}"></GridViewColumn> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 

Editar:
utilicé su código fuente con algunas modificaciones menores:

<ListView ItemContainerStyle="{DynamicResource ListViewItemStyle1}"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="My Header"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <Border BorderBrush="#FF000000" BorderThickness="1,0,1,0" Margin="-6,-2,-6,-2"> 
          <StackPanel Margin="6,2,6,2"> 
           <TextBlock Text="{TemplateBinding Content}"/> 
          </StackPanel> 
         </Border> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
    <ListViewItem>Hello</ListViewItem> 
    <ListViewItem>Stack</ListViewItem> 
    <ListViewItem>Overflow</ListViewItem> 
</ListView> 

y el resultado es igual esto:
ListView with vertical lines

Agregué líneas verticales a la derecha para una mejor visibilidad y el borde no se estrechó al extremo ds de la celda, vale, parece algo feo. Pero como pueden ver, está funcionando.

+0

gracias por la valiosa respuesta. Intenté usar el código de muestra anterior, pero no aparecieron las líneas verídicas. – Preeth

+2

Especialmente mi ejemplo muestra líneas verticales y horizontales. Está despojado de un proyecto. Incluso probé (partes) de tu código. Puedo ver una línea vertical negra a la izquierda. – Markus

5

Trate de colorear el fondo de la frontera para hacerla visible

Ejemplo:

<Border BorderBrush="#FF000000" Background="Red" BorderThickness="1,0,1,0" Margin="-6,-2,-6,-2"> 

Si usted verá un rectángulo rojo detrás de su contenido, que juega con los valores de Margen y BorderThickness para una mayor depuración.

Cuestiones relacionadas