我创建了一个由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>
任何人都可以帮助我吗?
答案 0 :(得分:0)
据我所知,WPF不支持此功能。也许你应该看看这个解决方案:
http://www.codeproject.com/KB/grid/ListView_layout_manager.aspx
答案 1 :(得分: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事件中将它放在视图的代码隐藏中。它不检查文件大小的宽度;我假设它们会比它们的标题小。