WPF ListView GridViewColumn宽度的50%

时间:2019-05-22 16:09:54

标签: c# wpf listview

我得到了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的大小会自动调整为适合我所不想要的数据。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果您切换为只读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>