Wpf 将ListView的宽度约束为父视图以强制子文本换行
我正在尝试获得一个类似于聊天窗口的窗口,其中绘制了一个文本项列表。窗口应可调整大小,如果不适合一行,则每个文本项应换行 到目前为止,我所拥有的: MessageItem-用户控件,边框中的多行文本块Wpf 将ListView的宽度约束为父视图以强制子文本换行,wpf,layout,Wpf,Layout,我正在尝试获得一个类似于聊天窗口的窗口,其中绘制了一个文本项列表。窗口应可调整大小,如果不适合一行,则每个文本项应换行 到目前为止,我所拥有的: MessageItem-用户控件,边框中的多行文本块 <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <Border BorderBrush="Silver" BorderThickness="1" Height="Auto" Horizonta
<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>
问题是:
如果我使用注释掉的StackPanel保存MessageItems,它将收缩MessageItem并使文本正确包装。如果我使用ListView,它不会收缩
我已经或多或少地从研究中弄明白了原因,但我还没有弄明白如何避开它。据我所知,我需要覆盖测量覆盖和/或安排覆盖,但我对WPF来说太陌生了,不知道我在做什么。rimshot我不知道为什么要将ListView放在ScrollViewer中,因为ListView内部有自己的ScrollView 为了让MessageItems包装,您需要关闭任何水平滚动条,否则容器ListView或ScrollViewer将为MessageItem提供所需的空间并显示滚动条 试一试 及 虽然我不确定你是否需要ScrollViewer
您最好使用ListBox和ItemTemplate,而不是ListView和用户控件我不知道为什么要将ListView放在ScrollViewer中,因为ListView内部有自己的ScrollView 为了让MessageItems包装,您需要关闭任何水平滚动条,否则容器ListView或ScrollViewer将为MessageItem提供所需的空间并显示滚动条 试一试 及 虽然我不确定你是否需要ScrollViewer
您最好使用ListBox和ItemTemplate,而不是ListView和用户控件,这比我想象的要简单得多。至于ScrollViewer:调整窗口大小,使ListView比窗口大->嘿,滚动条没有显示->工具箱->ScrolViewer->这正是我需要的就像我说的,我是WPF的新手,这比我想象的要容易得多。至于ScrollViewer:调整窗口大小,使ListView比窗口大->嘿,滚动条没有显示->工具箱->ScrolViewer->这正是我需要的就像我说的,我是WPF的新手
<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>
<ScrollViewer ... ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
<ListView ... ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>