我如何在GridView模式下向ListViewItem,ListView添加边框

时间:2010-05-12 07:24:20

标签: .net wpf 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设置边框行为(颜色等)(例如,如果第1列中的值=“可见”,则将边框颜色设置为黑色)。 我可以在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>

2 个答案:

答案 0 :(得分:16)

假设您使用带有GridView设置的ListView作为视图,则ListView默认情况下不会显示垂直或水平线。

如果你想添加horitzontal线,那么你可以改变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>
    ...

答案 1 :(得分:12)

您必须在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}" />