我的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>
情况是,当窗口小于列表本身时(例如,如果描述非常长,如同在所示示例中),则形成滚动条并且GridView
保持不变,因此操作按钮在屏幕(用户必须拖动滚动条)。
我想在初始化时根据当前窗口宽度设置最大列宽,以便在向用户显示ListView时始终显示Actions
列。像那样
然后,如果用户愿意,他可以手动调整任何列的大小(因此没有设置实际的&#34; maxwidth
&#34;,只有width
)。
我曾尝试使用*
,但GridView不了解其子项,因此*
无法在此工作,auto
不是一个好的选择因为我无法设置所需的最大值每列宽度,也是恒定宽度值是不需要的,因为它必须取决于可变的窗口大小(可用空间大小)。我认为我需要在代码中使用某种事件,但我不知道如何以适当的方式处理它。
答案 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(在我看来更适合这种情况)。