我在代码中创建了一个带有GridView的ListView。
ListView gridList = new ListView();
GridView gridListView = new GridView ();
gridList.View = gridListView;
现在,我定义了一个GridViewColumn,设置了header,width和bindingPath。一切都很好,数据显示出来。
GridViewColumn listColumn = new GridViewColumn();
listColumn.Header = "Some Header";
listColumn.Width = 100.0;
listColumn.DisplayMemeberBinding = new Binding("Name");
gridListView.Columns.Add(listColumn);
但此ListView的显示屏上没有显示边框/网格线。如何通过代码添加边框?
有人在这里描述了我的确切问题,但没有提到好的解决方案 http://social.msdn.microsoft.com/Forums/en-US/fa4fa8e0-81fe-487a-8763-590062d29c06/wpf-listview-gridview-row-border?forum=wpf
答案 0 :(得分:1)
WPF编程中的逻辑与您在winforms中所做的完全不同。应始终使用XAML(尽可能多)设置与UI相关的所有内容。 WPF库本身有许多部分主要用于XAML,尽管总有一个等效的代码隐藏。然而,当使用代码隐藏时,这可能是尴尬和非直观(以及直接)。
我知道你想要像Winforms中的ListView Grid一样。在WPF中,如果使用XAML代码,可以轻松实现。即使在代码背后,您也可以始终从XAML字符串构建Style
或Template
(在XamlReader
的帮助下)。这种方法适用于复杂场景,但在这种情况下,我有另一种方法(根本不使用XAML解析器)。这个技巧确实使得网格足够好(并且最多只能用于简化的权衡):
//we need an instance of Style to set to ListView.ItemContainerStyle
var style = new Style(typeof(ListViewItem));
//set the bottom border thickness to 1
var setter = new Setter(Control.BorderThickness, new Thickness(0,0,0,1));
style.Setters.Add(setter);
//set the border brush
var borderBrush = new LinearGradientBrush { StartPoint = new Point(0,0),
EndPoint = new Point(1,0)};
var gradStop = new GradientStop(Colors.Transparent, 0.001);
borderBrush.GradientStops.Add(gradStop);
gradStop = new GradientStop(Colors.Green, 0.001);
borderBrush.GradientStops.Add(gradStop);
gradStop = new GradientStop(Colors.Green, 0.999);
borderBrush.GradientStops.Add(gradStop);
gradStop = new GradientStop(Colors.Transparent, 0.999);
borderBrush.GradientStops.Add(gradStop);
setter = new Setter(Control.BorderBrush, borderBrush);
style.Setters.Add(setter);
yourListView.ItemContainerStyle = style;
请注意,每个Border
的默认内部ListViewItem
都有一个约2的硬编码CornerRadius
,因此只需将底部BorderBrush
设置为实心画笔,例如因为Brushes.Green
将在底部边框的两端显示一条向上的卷曲线。你可以自己试试。如果这个结果是可以接受的,代码可以更短更简单(因为你不必定义GradientBrush
来截断2个卷曲的结尾),如下所示:
setter = new Setter(Control.BorderBrush, Brushes.Green);
style.Setters.Add(setter);
如果行为仍然不是您想要的。您应该尝试我提到的关于使用XamlReader
解析XAML字符串并获取代码隐藏中所需内容的实例的方法。 (你可以自己搜索,很容易得到一些结果)。
答案 1 :(得分:0)
我建议你看看这个link,它包含一个在代码隐藏中创建的动态GridView,它对你的特定情况很有用。对于您提供的代码示例,您没有添加ShowGridLines属性。