问题描述
|
我正在尝试在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-horizontal-as-bonus.aspx
http://www.designerwpf.com/2007/12/11/how-do-i-set-up-grid-lines-for-my-listview/