【问题标题】:Vertical gridlines in a ListViewListView 中的垂直网格线
【发布时间】:2012-04-06 15:59:25
【问题描述】:

我有一个用作 GridView 的 WPF ListView。有什么办法可以让我在那里获得垂直网格线?

ListView 指定了 MinHeight,所以我希望 GridLine 一直到网格的底部,这样它会填充空白空间。

这似乎是一个相当棘手的问题。有没有可能解决?

【问题讨论】:

  • 这个问题你查了吗stackoverflow.com/questions/5645078/…
  • 这是一个开始,但不是我想要的。网格线没有在标题下方排列,也不会一直绘制到列表视图的底部

标签: wpf listview gridlines


【解决方案1】:

这就是我的做法。

      <ListView Grid.IsSharedSizeScope="True"
                ItemsSource="{Binding Path=MyList,FallbackValue='12345'}" >
        <ListView.ItemTemplate>
          <DataTemplate>
            <Grid>
              <Grid.ColumnDefinitions>
                <ColumnDefinition Width="3*" SharedSizeGroup="col0"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="1*" SharedSizeGroup="col2"/>
              </Grid.ColumnDefinitions>
              <TextBlock Grid.Column="0" Margin="10,0"
                       Text="{Binding Path=Name, FallbackValue='Name goes here'}"/>
              <Border Grid.Column="1" Margin="0,-2"
                    BorderBrush="DarkGray" 
                    BorderThickness="0,0,1,0" />
              <TextBlock Grid.Column="2" Margin="10,0"
                       Text="{Binding Path=DateModified, FallbackValue='Date goes here'}"/>
            </Grid>
          </DataTemplate>
        </ListView.ItemTemplate>
      </ListView>

SharedSizeGroupGrid.IsSharedSizeScope 属性是这种方式的关键。 Border 上的 Margin="0,-2" 属性确保分割线看起来像一条连续的垂直线。如果为两个文本块添加垂直边距,则需要增加边框的负垂直边距。

这将负责将内容排列成两个大小一致的列,它们之间有一条垂直线,但它不会延伸到没有数据的区域。如果您想要该功能,ListView 可能不是最佳选择。

将一些数据添加到 ViewModel 中的 MyList 属性会得到以下结果:

当然,MyList 属性必须是具有NameDateModified 属性的类的列表或集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多