【问题标题】:Limiting the width of the TextBlock in a WPF ListView限制 WPF ListView 中 TextBlock 的宽度
【发布时间】:2017-04-06 15:19:18
【问题描述】:

我有一个 ListView,在它的 ItemTemplate 中有一个 TextBlock(在网格内),它通常有很长的文本行。问题是如果文本太长,它会增加 ListViewItem 的宽度,而不是环绕文本。如何限制 TextBlock 的宽度,使其不会超过 ListView 的宽度?

我不想将宽度硬编码为恒定值。

我尝试将 ScrollViewer.Horizo​​ntalScrollBarVisibility 属性设置为 Disabled 并在 TextBlock 上设置 TextWrapping="Wrap",但这并没有做的伎俩。 当我调试应用程序时,Live Property Explorer 显示即使 ScrollViewer.Horizo​​ntalScrollBarVisibility 被禁用,它仍然可以水平滚动(IScrollProvider.Horizo​​ntallyScrollable 属性是真实)。

知道如何正确限制文本块的大小吗?

【问题讨论】:

  • 您是否尝试过使用TextBlockMaxWidth 属性?
  • 是的,我可以通过这种方式限制宽度,但我不想将它硬编码为一个常量值(当应用程序的主窗口调整大小时,ListView 可以改变它的大小)或绑定它到对象的 ListView 的 ActualWidth 。两者都是脆弱的解决方案。

标签: c# wpf xaml listview horizontal-scrolling


【解决方案1】:

玩了一点,这给了我预期的结果:

<ListView x:Name="listView" 
                  HorizontalAlignment="Stretch" 
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=.}" TextWrapping="Wrap"></TextBlock>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

希望它也对你有用!

【讨论】:

  • 感谢您的尝试。这个示例也适用于我,但由于某种原因我的程序不适用。我会检查差异。
【解决方案2】:

如果您不想对文本块的 MaxWidth 进行硬编码,只需根据 ListView 宽度为其指定相对宽度即可。

【讨论】:

  • 我希望有一种更优雅的方式,但似乎这是我要使用的解决方案(使用转换器将 MaxWidth 属性绑定到父 ListView 的 ActualWidth 属性的 95% 值)。
猜你喜欢
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
相关资源
最近更新 更多