如何在WPF中为listviewitem放置垂直线

问题描述

| 我正在尝试在ListViewItem的列之间放置垂直线。我尝试了给出的解决方案。但是它不起作用。谁能帮我解决这个问题。我为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\" 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>
从字面上看,它应该工作,但不工作。我无法使用上述代码添加垂直线。     

解决方法

这是一个带有ListView和两列的简短示例。诀窍是定义一个带边框的DataTemplate,拉伸边框以填充单元格(请参见ItemContainerStyle,Style ListViewItem,H / V-ContentAligment = Stretch),并在这种情况下显示右侧和底线(按BorderThickness = \“ 0,1,1 \”)。对于您的情况,请使用BorderThickness = \“ 0,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,1\" BorderBrush=\"LightGray\" Margin=\"-6,-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\">
                    <TextBlock Name=\"ActualValueTextBlock\" Margin=\"2,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\" Margin=\"-6,-2,-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>
结果是这样的: 我在右侧添加了垂直线以提高可见度,并且边框未延伸至单元格的边界-好的,因此看起来有些难看。但是如您所见,它正在工作。     ,尝试给边框的背景上色以使其可见 例:
<Border BorderBrush=\"#FF000000\" Background=\"Red\" BorderThickness=\"1,-2\">
如果您在内容后面看到一个红色矩形,则可以使用Margin和BorderThickness的值进行进一步的调试。     ,检查是否有帮助 http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/12/16/wpf-listview-vertical-lines-horizo​​ntal-as-bonus.aspx http://www.designerwpf.com/2007/12/11/how-do-i-set-up-grid-lines-for-my-listview/