Dot-Net

我如何在 GridView 模式下向 ListViewItem、ListView 添加邊框

  • October 31, 2015

我想在 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>
   ...

引用自:https://stackoverflow.com/questions/2816731