如何将 ListView/GridView 调整为 WPF 中的内容

How to resize ListView/GridView to contents in WPF

我想将网格视图的列大小调整到 ListView 的内容。有XAML代码:

<ListView x:Name="listViewStatEntries"  
              AlternationCount="2" Grid.Row="8" Grid.ColumnSpan="3" Background="White"
              ItemsSource="{Binding StatResult.StatEntries}" >

  <ListView.View>
    <GridView>
      <GridViewColumn  Width="Auto" DisplayMemberBinding="{Binding Param.Speciality}">
        <GridViewColumn.Header>
          <GridViewColumnHeader Content="{Binding Labels[2851]}" Tag="Param.Speciality" Click="listViewStatEntriesColumnHeader_Click" Width="Auto" />
        </GridViewColumn.Header>
      </GridViewColumn>

      <GridViewColumn Width="Auto" DisplayMemberBinding="{Binding Alarm}">
        <GridViewColumn.Header>
          <GridViewColumnHeader Content="{Binding Labels[2765]}" Tag="Alarm" Click="listViewStatEntriesColumnHeader_Click" Width="Auto" />
        </GridViewColumn.Header>
      </GridViewColumn>
    </GridView>
  </ListView.View>

</ListView>

我找到了这个帖子:Force resize of GridView columns inside ListView 并尝试了 Oskar 解决方案:

public void AutoSizeColumns()
{
  GridView gv = listView1.View as GridView;
  if (gv != null)
  {
    foreach (var c in gv.Columns)
    {
        // Code below was found in GridViewColumnHeader.OnGripperDoubleClicked() event handler (using Reflector)
        // i.e. it is the same code that is executed when the gripper is double clicked
        if (double.IsNaN(c.Width))
        {
            c.Width = c.ActualWidth;
        }
        c.Width = double.NaN;
    }
  }
}

但是使用此解决方案,列的大小仅调整为可见内容,而不是调整为 ListView 中的所有数据。如何调整所有数据的列大小?

在此先感谢您的帮助!

它们仅调整可见行大小的原因是因为您启用了虚拟化(这是默认设置)。试试关掉它

<ListView VirtualizingStackPanel.IsVirtualizing="False"