如何在WPF中自动拉伸ListView的列以填充包含的Grid?

4
我创建了一个由两列组成的ListView:“文件名”和“大小(MB)”。这个ListView包含在一个网格中。由于文件名可能比文件大小长,我想尽可能多地为“文件名”列分配宽度,而不会破坏“大小”列。
换句话说,我希望“大小”列适合其内容,“文件名”列填充网格的其余部分。
我已经尝试了许多参数,但无法达到我的目标。
我的最后一次尝试看起来像这样:
                <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>

有人可以帮帮我吗?

2个回答

0

这应该可以运行:

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事件中。它不会检查文件大小的宽度;我假设它们应该小于其标题。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接