WPF編程中的邏輯與您在winforms中完成的邏輯完全不同。與UI相關的所有內容應始終使用XAML進行設置(儘可能多)。 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;
注意,默認每個ListViewItem
內Border
有大約一個硬編碼CornerRadius
2,所以通過將底部BorderBrush
設置爲實心畫筆,例如Brushes.Green
,將在底部邊界的兩端顯示稍微向上的捲曲線。你可以自己嘗試。如果這個結果是可以接受的,該代碼可以是這樣的簡短一些(因爲你沒有定義GradientBrush
到截止2捲曲的兩端):
setter = new Setter(Control.BorderBrush, Brushes.Green);
style.Setters.Add(setter);
如果該行爲依然沒有什麼你要。你應該嘗試我提到的關於使用XamlReader
來解析XAML字符串並在代碼隱藏中得到你想要的任何實例的方法。 (你可以自己搜索它,很容易得到一些結果)。
刪除所有內容並使用正確的XAML。 – 2014-10-01 13:31:42
我不能使用XAML,因爲我必須動態地創建這個控件,這個控件被渲染成一個XPS文件。 – 2014-10-01 13:41:30