WPF列表框项没有自动换行

12

我的ListBox中有一个描述字段,可能会很长。我想要将它换行而不是显示水平滚动条。如果设置MaxWidth,它可以工作,但由于ListBox的大小会改变,我不想硬编码数值。

最佳做法是什么?

编辑:描述信息在TextBlock中。

XAML简化代码(已删除不必要内容,仍显示问题):

         <ListBox BorderThickness="0" Padding="5" Name="lstTasks">
            <ListBox.ItemsSource>
                <Binding Source="{StaticResource dataTasks}"/>
            </ListBox.ItemsSource>

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBlock Text="{Binding Path=RequestDescription}" TextTrimming="WordEllipsis" TextWrapping="Wrap" Height="60" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

既然您说设置MaxWidth可以解决问题,那么将该MaxWidth绑定到导致宽度更改的某个内容上如何? - Charles Prakash Dasari
2个回答

35

尝试将ListBoxItem的宽度强制设置为ListBox的宽度:

<ListBox
     Name="lstTasks"
     BorderThickness="0"
     Padding="5"
     HorizontalContentAlignment="Stretch">

另外,您可以尝试禁用水平滚动:

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

4
谢谢,禁用滚动条立即解决了问题。 - Chris McGrath
1
如果对您有用,请点赞。堆栈评论不是eBay评级。 - Gusdor
2
设置滚动条的可见性似乎会将包含控件的宽度限制在列表框的边界内。很奇怪,但确实如此。 - Tombala
1
不要混淆“禁用”和“隐藏”!那是我的错误。 “隐藏”意味着仍然有滚动条,只是您看不到它。 - DallonF

0

同时使用文本包装和修剪没有意义。您应该使用其中一个texttrimming或textwrapping。如果它修剪,它就不会换行。

对于textwrapping,Matt的答案是正确的,对于修剪,您应该定义width或maxwidth属性值。

这对于SL开发人员来说完全相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接