Dot-Net
我如何在 GridView 模式下向 ListViewItem、ListView 添加邊框
我想在 ListViewItem 周圍有一個邊框(在我的例子中是行)。執行時生成的 ListView 源和列。在 XAML 我有這個結構:
<ListView Name="listViewRaw"> <ListView.View> <GridView> </GridView> </ListView.View> </ListView>在執行時,我將 listview 綁定到 DataTable,添加必要的列和綁定:
var view = (listView.View as GridView); view.Columns.Clear(); for (int i = 0; i < table.Columns.Count; i++) { GridViewColumn col = new GridViewColumn(); col.Header = table.Columns[i].ColumnName; col.DisplayMemberBinding = new Binding(string.Format("[{0}]", i.ToString())); view.Columns.Add(col); } listView.CoerceValue(ListView.ItemsSourceProperty); listView.DataContext = table; listView.SetBinding(ListView.ItemsSourceProperty, new Binding());所以我想在每一行周圍添加邊框,並使用 DataTriggers 設置邊框行為(顏色等)(例如,如果第一列中的值 =“可見”,則將邊框顏色設置為黑色)。我可以通過 ItemTemplate 中的 DataTemplate 設置邊框嗎?我知道解決方案,您可以在其中使用 CellTemplates 進行操作,但我不太喜歡它。如果可能的話,我想要這樣的東西。
<DataTemplate> <Border Name="Border" BorderBrush="Transparent" BorderThickness="2"> <ListViewItemRow><!-- Put my row here, but i ll know about table structure only during runtime --></ListViewItemRow> </Border> </DataTemplate>
您必須在 ControlTemplate 中設置邊框
<Style x:Key="BorderedItem" TargetType="ListViewItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListViewItem"> <Border Name="Border" BorderBrush="Transparent" BorderThickness="2"> <ContentPresenter /> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>現在您可以在 ListView 中設置此樣式
<ListView ItemContainerStyle="{StaticResource BorderedItem}" />
假設您正在使用將 GridView 設置為視圖的 ListView,則預設情況下 ListView 不會顯示垂直或水平線。
如果要添加水平線,則可以更改 ListViewItem 上的邊框,例如:
<ListView ...> <ListView.ItemContainerStyle> <Style TargetType="{x:Type ListViewItem}"> <Setter Property="BorderBrush" Value="LightGray" /> <Setter Property="BorderThickness" Value="0,0,0,1" /> </Style> </ListView.ItemContainerStyle> <ListView.View> <GridView> <GridViewColumn ... /> </GridView> </ListView.View> ...