2009-08-07 52 views
3

我有一个数据网格定义为WPF数据网格的列宽度和重新排序

<wpftoolkit:DataGrid 
     x:Name="AccountsDataGrid" 
     AutoGenerateColumns="False" 
     ItemsSource="{Binding Path=Accounts}" 
     ColumnReordered="DataGrid_ColumnReordered" 
     SelectionUnit="FullRow" 
     RowHeaderWidth="0" 
     HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     > 
     <wpftoolkit:DataGrid.Columns> 
      <wpftoolkit:DataGridTextColumn Header="Account Id" Binding="{Binding Path=AccountId}" Width="Auto" /> 
      <wpftoolkit:DataGridTextColumn Header="Account Name" Binding="{Binding Path=AccountName}" Width="*" /> 
     </wpftoolkit:DataGrid.Columns> 
    </wpftoolkit:DataGrid> 

其上负载看起来很大。第一列适合适合内容和标题所需的最小宽度。第二列拉伸以填充数据网格的宽度的其余部分(所以不具有第三填料塔)。但是,如果我试图重新排序的列,该帐户名列不能被调整到一个宽度不到什么它的宽度是重新排序之前。所以我增加了一个处理程序上ColumnReordered事件,搞清楚我可以重新设置列宽,但它似乎并没有工作。事实上,它缩小了ACCOUNTID列到几乎没有,而帐户名栏仍然不能调整大小小。

private void DataGrid_ColumnReordered(object sender, Microsoft.Windows.Controls.DataGridColumnEventArgs e) 
    { 
     foreach (DataGridColumn column in AccountsDataGrid.Columns) 
     { 
      if (column.Equals(AccountsDataGrid.Columns.Last())) 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Star); 
      } 
      else 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Auto); 
      } 
     } 
    } 

有没有更好的方式来处理列宽和为何重新排序列打破在列集合列调整能力

回答

3

列并没有改变立场。只有DisplayIndexes正在改变。试试这个:

private void DataGrid_ColumnReordered(object sender, DataGridColumnEventArgs e) 
    { 
     int lastColumnOrder = AccountsDataGrid.Columns.Count() - 1; 
     foreach (DataGridColumn column in AccountsDataGrid.Columns) 
     { 
      if (column.DisplayIndex == lastColumnOrder) 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Star); 
      } 
      else 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Auto); 
      } 
     } 
    } 
相关问题