【问题标题】:WPF ListView GridViewColumn width 50% of spaceWPF ListView GridViewColumn 宽度 50% 的空间
【发布时间】:2019-10-09 04:33:30
【问题描述】:

我得到了 ListView 的这个 xaml:

<ListView Grid.Row="4" Grid.Column="1" 
              ItemsSource="{Binding Path=ListViewAgentItems}" 
              HorizontalAlignment="Left" 
              HorizontalContentAlignment="Left">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.View>
            <GridView>
                <GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="Agent ID" DisplayMemberBinding="{Binding AgentId}"/>
                <GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="Distance" DisplayMemberBinding="{Binding Distance}"/>
            </GridView>
        </ListView.View>
</ListView>

这是风格:

<Window.Resources>
    <Style x:Key="ListViewStyle" TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</Window.Resources>

我希望GridViewColumn 均匀地占据所有空间,这意味着ListView 在网格列中,所以我希望GridView 占据整个列空间,并且 GridView 的两列将占宽度的 50%。到目前为止,ListView 会自动调整大小以适应它所保存的我不想要的数据。

【问题讨论】:

    标签: c# wpf listview


    【解决方案1】:

    简单的解决方案是使用数据网格而不是列表视图。您可以将datagrid xxxx列宽设置为*。

    如果您真的想坚持使用 listview 并且您没有设置宽度,因此您可以将宽度设置为特定数字,请参阅。 How can I get a ListView GridViewColumn to fill the remaining space in my grid?

    【讨论】:

      【解决方案2】:

      如果你切换到只读DataGrid,你可以使用star-sizing

      <DataGrid Grid.Row="4" Grid.Column="1" 
                ItemsSource="{Binding Path=ListViewAgentItems}" 
                IsReadOnly="True" AutoGenerateColumns="False">
          <DataGrid.Columns>
              <DataGridTextColumn Header="Agent ID" Binding="{Binding AgentId}" Width="1*"/>
              <DataGridTextColumn Header="Distance" Binding="{Binding Distance}" Width="1*"/>
          </DataGrid.Columns>
      </DataGrid>
      

      【讨论】:

      • 这个解决方案发生了一些奇怪的事情。设计如我所愿地展示它。但是,当我运行该应用程序时,它会自动添加更多列以及 ListViewAgentItems 中该类型的其他字段成员
      • @YonatanNir:哦,你应该添加AutoGenerateColumns="False"。查看我的编辑。
      • 为什么需要 IsReadOnly?没有它也可以工作
      • @YonatanNir:如果您的属性是只读的,则不需要它。否则,您将能够通过双击单元格来编辑它们,然后它不再表现为ListView。这就是我将它添加到示例标记中的原因。
      猜你喜欢
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2011-06-11
      • 2012-02-23
      • 1970-01-01
      • 2021-12-27
      • 2011-10-08
      相关资源
      最近更新 更多