【问题标题】:WPF ListView TextBlock TextWrappingWPF ListView TextBlock TextWrapping
【发布时间】:2011-07-26 05:35:17
【问题描述】:

我正在构建一个需要有五列的 ListView - 第一个需要有可以是任意长度的文本,并且需要在窗口大小发生变化时换行(除了更改行高以使换行的文本可见) 和其他四列是 45 的静态宽度。我一直在寻找几个小时,我遇到的每个解决方案要么需要静态宽度,要么不起作用。

尝试过的解决方案:

auto、1*、2* 等的列宽(忽略设置) DockPanel(忽略设置) WrapPanel(忽略) 将宽度设置为实际宽度的父级的相对源(忽略)

有什么想法吗?似乎很多人都遇到过同样的问题,但我非常希望不必为这个专栏走静态宽度路线。特别是因为无论如何我这样做时内容都会被切断(即使该行使用 height="Auto" )。整个窗口的宽度可以小到 1024,但也可以是 1600+,这就是我想要动态调整大小的原因。这样一来,较小的屏幕将进行内容换行,而较大的屏幕将只显示一行,因为内容适合。

这是 XAML:

<ListView.ItemTemplate>
    <DataTemplate>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition Width="45" />
                <ColumnDefinition Width="45" />
                <ColumnDefinition Width="45" />
                <ColumnDefinition Width="45" />
            </Grid.ColumnDefinitions>

            <!-- This is the TextBlock that needs to wrap its content (and
                 change the height of the row (so the full content is still
                 visible) to whatever the available space is, but should not
                 make overall ListView wider than the parent's width. -->
            <TextBlock Text="{Binding Content}" Padding="20,6,6,6" />                            

            <!-- These four blocks will have other content eventually, but only need
                 to be 45 wide -->
            <TextBlock Text="X" Grid.Column="1" HorizontalAlignment="Center" />
            <TextBlock Text="X" Grid.Column="2" HorizontalAlignment="Center" />
            <TextBlock Text="X" Grid.Column="3" HorizontalAlignment="Center" />
            <TextBlock Text="X" Grid.Column="4" HorizontalAlignment="Center" />
        </Grid>
     </DataTemplate>
</ListView.ItemTemplate>

【问题讨论】:

    标签: wpf listview grid word-wrap


    【解决方案1】:

    没那么容易……但可以做到。

    我为你写了一个解决方案。简而言之,使用 Expression Blend 创建 ListView 模板的副本,并删除 ItemPresenter 周围的 ScrollViewer。

    这里有更深入的解释:

    How to have the TextBlock in a left column of a Grid in a ListView Template expand or shrink with text wrapping?

    【讨论】:

    • 这正是我想要的!我遇到的唯一问题(希望很容易解决)是,当文本换行时,内容所在行的大小不会改变,因此被换行的内容会消失。我可以看到大多数字符的顶部,但不足以阅读它们。谢谢你让我达到了 99%!
    • 在我的盒子上,我的测试应用看不到这个。您必须在应用程序中明确设置高度或将 VerticalAlignment 设置为拉伸以外的其他内容。在 cmets 中发布您的新 XAML。
    • 啊——就是这样。有一个高度值为 30 的 ListView.ItemContainerStyle。我把它拿掉了,这东西完全符合我的要求。如果有办法给你不止一个赞成票,我会的。
    【解决方案2】:
    <ListView HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListView.ItemTemplate>
            ...
        </ListView.ItemTemplate>
    </ListView>
    

    【讨论】:

      【解决方案3】:

      我会将 TextWrapping="Wrap" 添加到第一个 TextBlock 元素。

      【讨论】:

      • 它已被添加,但在我尝试一切尝试时,我一定不小心将其删除了。但是该设置被忽略了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多