2010-11-11 80 views
3

我已经创建了由2列组成的ListView:“文件名”和“大小(MB)”。此ListView包含在网格中。由于文件名可能比文件大小更长,因此我希望为'文件名'列尽可能分配宽度,而不会损坏'大小'列。 换句话说,我希望'大小'列适合其内容和'文件名'列填补网格的其余部分。如何自动拉伸ListView的列以填充WPF中包含的网格?

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

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

   <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

这应该工作:

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事件。它不检查文件大小的宽度;我假设他们会比他们的标题少。