我需要你的帮助! : - )
查看此代码示例:
<ListBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="500">
<ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300" BorderBrush="Red" BorderThickness="5">
<ListBox.Items>
<RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300" SizeChanged="OnInnserItemSizeChanged"/>
<RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
<RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
</ListBox.Items>
</ListBox>
<ListBox x:Name="Item2" BorderBrush="Green" BorderThickness="5" Width="300" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<ListBox.Items>
<RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
<RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
<RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
</ListBox.Items>
</ListBox>
</ListBox>
现在,当我运行它并在其中一个RichTextBox中单击“Enter”/“Return”时,外部列表框项(例如x:Name = Item1)会拉伸以匹配新的大小 - 但是当我删除新的添加了行,它不会调整回原来的大小......
感谢名单, 吉利
答案 0 :(得分:4)
这是由VirtualizingStackPanel处理滚动的方式引起的,虽然我不知道它背后的原因。您可以使用常规StackPanel作为ItemsPanel而不是VirtualizingStackPanel来阻止它:
<ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
Width="300" BorderBrush="Red" BorderThickness="5">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
或通过将ScrollViewer.CanContentScroll设置为False来阻止VirtualizingStackPanel处理滚动:
<ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
Width="300" BorderBrush="Red" BorderThickness="5"
ScrollViewer.CanContentScroll="False">
请注意,执行其中任何一项都会导致您丢失内部ListBox中的虚拟化。在这种情况下,你无论如何都没有利用它,因为外部ListBox有一个ScrollViewer,可以让内部ListBox增长到它想要的高度,这意味着它将始终显示它的所有行。