列表框中的扩展器在折叠时留下空白
我们有一个相当复杂的用户界面,这给我们带来了一些问题。
我有一个包含一组数据项的ListBox
。每个项目的 DataTemplate
都是一个 Expander
。标题是文本,Expander
的内容是 ListBox
。 ListBox
包含 SubDataItems。每个 SubDataItem 的 DataTemplate
都是一个 Expander
。
下面是一个简化的 XAML,我在其中重现了该问题:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Header}">
<ListBox ItemsSource="{Binding SubItems}">
<ListBox.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding SubHeader}">
<Grid Height="40">
<TextBlock Text="{Binding SubText}" />
</Grid>
</Expander>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
布局的生成方式存在问题。如果与 SubDataItem 对应的任何 Expander
被展开,则包含此 ListBox
的 ListBoxItem
(父 DataTemplate
) 正确地请求更多空间。所以我可以展开所有 SubDataItems 并正确查看我的数据。但是,当我折叠时,我之前要求扩展的空间仍然是空白,而不是被 ListBoxItem
回收。
这是一个问题,因为如果我有 10 个子数据项,并且碰巧同时展开所有这些子数据项然后折叠,则会有大量空白浪费我的空间。
如何强制 WPF 将 ListBoxItem 的大小调整为正确的状态?
We have a rather complex UI that is presenting some problems for us.
I have a ListBox
that contains a set of DataItems. The DataTemplate
for each item is an Expander
. The header is text, the content of the Expander
is a ListBox
. The ListBox
contains SubDataItems. The DataTemplate
for each SubDataItem is an Expander
.
Here is a simplified XAML in which I reproduce the issue:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Header}">
<ListBox ItemsSource="{Binding SubItems}">
<ListBox.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding SubHeader}">
<Grid Height="40">
<TextBlock Text="{Binding SubText}" />
</Grid>
</Expander>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
There is a problem with how the layout is produced. If any Expander
corresponding to the SubDataItem is expanded, the ListBoxItem
containing this ListBox
(the Expander.Content
in the parent DataTemplate
) correctly requests more space. So I can expand all SubDataItems and correctly see my data. However, when I collapse, the space I previously asked to expand, remains blank, instead of being reclaimed by the ListBoxItem
.
This is a problem because if I have say 10 SubDataItems and happen to expand all of them at the same time and then collapse, there is a significant amount of white space wasting my real estate.
How can I force WPF to resize the ListBoxItem
to the correct state?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您是否尝试过使用
DockPanel
作为根ListBox
的ItemsPanel
,并拥有每个Expander
的DockPanel.Dock="顶部"
?Have you tried using
DockPanel
as your root'sListBox
'sItemsPanel
, and have eachExpander
'sDockPanel.Dock="Top"
?