【问题标题】:How to auto stretch a column of a ListView to fill the containing Grid in WPF?如何自动拉伸 ListView 的一列以填充 WPF 中的包含网格?
【发布时间】:2012-07-10 03:25:49
【问题描述】:

我创建了一个由 2 列组成的 ListView:“文件名”和“大小 (MB)”。此 ListView 包含在 Grid 中。由于文件名可能比文件大小长,我想在不损坏“大小”列的情况下为“文件名”列分配尽可能多的宽度。 换句话说,我希望“大小”列适合其内容,而“文件名”列可以填充网格的其余部分。

我一直在玩很多参数,但可以实现我的目标。

我的最后一次尝试是这样的:

                <ListView Name="BrowseFilesListView">                        
                    <ListView.ItemContainerStyle>
                        <Style TargetType="ListViewItem">
                            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                        </Style>
                    </ListView.ItemContainerStyle>                        
                    <ListView.View>
                        <GridView>                               
                            <GridViewColumn Header="File Name"> 
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding Name}" HorizontalAlignment="Stretch"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="Auto" Header="Size (MB)" DisplayMemberBinding="{Binding Path=Size}"/>
                        </GridView>
                    </ListView.View>
                </ListView>

谁能帮帮我?

【问题讨论】:

    标签: wpf listview


    【解决方案1】:

    据我所知,WPF 不支持此功能。也许你应该看看这个解决方案:

    http://www.codeproject.com/KB/grid/ListView_layout_manager.aspx

    【讨论】:

      【解决方案2】:

      这应该可以工作:

      var gridView = SearchResultsTable.View as GridView;
      var columns = new GridViewColumnCollection();
      if (gridView != null)
      {
          columns = gridView.Columns;
      }
      var width = BrowseFilesListView.ActualWidth;
      var sizeWidth = columns[1].ActualWidth; // columns[0] is the Filename, etc.
      const int padding = 10; // slightly hackish
      columns[0].Width = width - sizeWidth - padding;
      

      我会将它放在视图的代码隐藏中,在 Window_Loaded 事件中。它不检查文件大小的宽度;我假设它们会小于它们的标题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 2019-03-15
        • 2014-08-15
        • 1970-01-01
        • 2016-01-03
        • 2011-11-28
        相关资源
        最近更新 更多