ListView中的垂直网格线

时间:2012-04-06 15:59:25

标签: wpf listview gridlines

我有一个WPF ListView,我将其用作GridView。我有什么方法可以在那里获得垂直网格线?

ListView指定了MinHeight,所以我希望GridLine一直到网格的底部,所以它会填满空白区域。

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

1 个答案:

答案 0 :(得分: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属性是这种方式的关键。 Margin="0,-2"上的Border属性可确保分割线看起来像一条连续的垂直线。如果向两个文本块添加垂直边距,则需要增加边框的负垂直边距。

这将把事情分成两个大小合适的列,它们之间有一条垂直线,但它不会扩展到没有数据的区域。如果您需要该功能,ListView可能不是最佳选择。

将一些数据添加到ViewModel中的MyList属性会产生以下结果: enter image description here

当然,MyList属性必须是以NameDateModified作为属性的类的列表或集合。