我试图获得一个类似于聊天窗口的窗口,其中绘制了一个文本项列表。窗口应该可以调整大小,并且每个文本项如果不适合一行则应该换行。
到目前为止我所拥有的:
MessageItem
- 一个用户控件,一个边框中的多行文本块
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Border BorderBrush="Silver" BorderThickness="1" Height="Auto" HorizontalAlignment="Left" Margin="0,10,0,10" Name="messageContainer" VerticalAlignment="Top" Width="Auto">
<TextBlock Height="Auto" HorizontalAlignment="Stretch" Margin="0" Name="messageContent" VerticalAlignment="Stretch" Width="Auto" Text="This is some longer text. Wow that wasn't as long as I thought." TextWrapping="Wrap" Padding="10" />
</Border>
</Grid>
MessageBox
- 具有包含 MessageItems 的 ListView 的用户控件
<Grid Name="messageGrid" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<!--<StackPanel Height="Auto" HorizontalAlignment="Stretch" Margin="0" Name="messagePanel" VerticalAlignment="Stretch" Width="Auto">
</StackPanel> -->
<ListView HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<local:MessageItem></local:MessageItem>
</ListView>
</ScrollViewer>
</Grid>
问题:
如果我使用注释掉的 StackPanel 来保存 MessageItem,它将正确缩小 MessageItem(并导致文本换行)。如果我使用 ListView,它不会缩小。
我或多或少地从研究中弄清楚了原因,但我无法弄清楚如何解决它。据我所知,我需要覆盖 MeasureOverride 和/或 ArrangeOverride,但我对 WPF 太陌生了,不知道我在做什么。(边缘)