WPF GridView将宽度调整为可用空间大小

时间:2017-09-13 07:36:50

标签: c# wpf gridview

我的WPF应用程序中有一个ListView

<ListView Name="generatorsList" ItemsSource="{Binding GeneratorsList}" SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Name}">
                <GridViewColumn.Header>
                    <GridViewColumnHeader Tag="Name">Name</GridViewColumnHeader>
                </GridViewColumn.Header>
            </GridViewColumn>
            <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}" />
            <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Description}" />
            <GridViewColumn Header="Actions" Width="60">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        //buttons
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

看起来像这样 current with big window

情况是,当窗口小于列表本身时(例如,如果描述非常长,如同在所示示例中),则形成滚动条并且GridView保持不变,因此操作按钮在屏幕(用户必须拖动滚动条)。 current with small window

我想在初始化时根据当前窗口宽度设置最大列宽,以便在向用户显示ListView时始终显示Actions列。像那样 expected result

然后,如果用户愿意,他可以手动调整任何列的大小(因此没有设置实际的&#34; maxwidth&#34;,只有width)。 我曾尝试使用*,但GridView不了解其子项,因此*无法在此工作,auto不是一个好的选择因为我无法设置所需的最大值每列宽度,也是恒定宽度值是不需要的,因为它必须取决于可变的窗口大小(可用空间大小)。我认为我需要在代码中使用某种事件,但我不知道如何以适当的方式处理它。

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

<DataGrid Name="generatorsList" 
          ItemsSource="{Binding GeneratorsList}"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" 
                            Binding="{Binding Name}"
                            Width="*"/>

        <DataGridTextColumn Header="Type" 
                            Binding="{Binding Type}"/>

        <DataGridTextColumn Header="Description" 
                            Binding="{Binding Description}"
                            Width="2*"/>

        <DataGridTemplateColumn Header="Actions"
                                Width="auto"
                                MinWidth="60">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <!--buttons-->
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

我已将ListView更改为DataGrid(在我看来更适合这种情况)。