【问题标题】:Constraining a ListView's width to parent to force child text to wrap将 ListView 的宽度限制为父项以强制子文本换行
【发布时间】:2012-05-24 11:51:53
【问题描述】:

我试图获得一个类似于聊天窗口的窗口,其中绘制了一个文本项目列表。窗口应该是可调整大小的,每个文本项如果不适合一行则应该换行。

到目前为止我所拥有的:

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 - 一个带有 ListView 的用户控件,其中包含 MessageItems

<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 来保存 MessageItems,它将正确缩小 MessageItem(并导致文本换行)。如果我使用 ListView,它不会缩小。

我或多或少地从研究中弄清楚了原因,但我无法弄清楚如何解决它。据我所知,我需要覆盖 MeasureOverride 和/或 ArrangeOverride,但我对 WPF 太陌生了,不知道我在做什么。 (边缘)

【问题讨论】:

    标签: wpf layout


    【解决方案1】:

    我不确定为什么要将 ListView 放在 ScrollViewer 中,因为 ListView 在内部有自己的 ScrollView。

    为了让您的 MessageItems 进行包装,您需要关闭任何水平滚动条,否则容器(ListView 或 ScrollViewer)将为 MessageItem 提供所需的空间并显示滚动条。

    试试

    <ScrollViewer ... ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
    

    <ListView ... ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
    

    虽然我不确定你是否需要 ScrollViewer。

    最好使用 ListBox 和 ItemTemplate 而不是 ListView 和用户控件

    【讨论】:

    • 哇,这比我预期的要容易得多。至于 ScrollViewer:调整窗口大小,使 ListView 比窗口大 -> “嘿,滚动条没有出现” -> 工具箱 -> ScrollViewer -> “这正是我需要的!” :) 就像我说我是 WPF 新手:P
    猜你喜欢
    • 2020-11-09
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    相关资源
    最近更新 更多