2011-04-13 94 views
9

我想在ListViewItem中的列之间放置垂直线。我试过了解决方案。但它不工作。任何人都可以帮助我解决这个问题吗?我为ListViewItem创建了一个单独的样式。我是否需要在样式中添加一些属性?如何把WPF中的listviewitem垂直线

的代码是这样的

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

字面上它应该工作,但它不工作。我不能添加使用上面的代码垂直线..

+2

你可以在TextBlock中看到'内容'吗? – Markus 2011-04-15 09:48:50

回答

11

这里是一个ListView两列的短样本。诀窍是定义一个带有边框的DataTemplate,将边框填充到单元格中(参见ItemContainerStyle,Style ListViewItem,H/V-ContentAligment = Stretch),并显示(在本例中)右边和底部边框(通过BorderThickness = “0,0,1,1”)。为了您的情况下使用了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> 

编辑:
我用了一些小修改源代码:

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

,结果是一样这个:
ListView with vertical lines

我在右侧添加了垂直线以获得更好的可见性,并且边界没有固定到boun细胞的 - 好吧,所以它看起来有点难看。但正如你所看到的,它正在发挥作用。

+0

感谢您的有价值的回复。我尝试使用上面的示例代码,但没有出现verical行。 – Preeth 2011-04-15 08:58:31

+2

特别是我的示例显示垂直和水平线。它从一个项目中被剥离。我甚至尝试过(部分)你的代码。我可以在左边看到一条黑色的垂直线。 – Markus 2011-04-15 09:44:30

5

尝试彩色边框的背景使其可见

例子:

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

如果您将看到您的内容后面的红色长方形,比保证金价值发挥和BorderThickness进一步调试。