【问题标题】:How i can add border to ListViewItem, ListView in GridView mode我如何在 GridView 模式下向 ListViewItem、ListView 添加边框
【发布时间】:2010-05-12 07:24:20
【问题描述】:

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

【问题讨论】:

    标签: .net wpf listview


    【解决方案1】:

    假设您使用的 ListView 将 GridView 设置为 View,那么 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>
        ...
    

    【讨论】:

    • “这里”?这是哪里?
    【解决方案2】:

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

    【讨论】:

    • 谢谢!我以多种方式对 DataTemplate 进行了实验,我所要做的就是将其切换到 ControlTemplate,哦,还有一件事,使用 GridView,应该使用 GridViewRowPresenter 代替:)
    • 谢谢你们两位,包括@Andrew,他提醒我们在 GridView 案例中使用 GridViewRowPresenter,可能节省了我几个小时的调试时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多