WPF 编程中的逻辑与您在 winforms 中所做的完全不同。与 UI 相关的所有内容都应始终使用 XAML 进行设置(尽可能)。 WPF 库本身有许多部分主要用于 XAML,尽管总是有一个等效的代码隐藏。然而,那时使用代码隐藏可能会很尴尬且不直观(以及直截了当)。
我了解您想要 Winforms 中的 ListView Grid 之类的东西。如果您使用 XAML 代码,在 WPF 中可以轻松实现。即使在后面的代码中,您也始终可以从 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;
请注意,每个ListViewItem 的默认内部Border 的硬编码CornerRadius 约为2,因此仅将底部BorderBrush 设置为实心画笔(例如Brushes.Green)会显示一点点底部边框两端的向上卷曲线。你可以自己试试。如果这个结果是可以接受的,代码可以更短更简单(因为你不必定义GradientBrush 来切断2个卷曲的末端)像这样:
setter = new Setter(Control.BorderBrush, Brushes.Green);
style.Setters.Add(setter);
如果行为仍然不是您想要的。您应该尝试我提到的关于使用 XamlReader 解析 XAML 字符串并在代码隐藏中获取任何您想要的实例的方法。 (你可以自己搜索,很容易得到一些结果)。