【问题标题】:How to make text wrap in a WPF TreeViewItem?如何在 WPF TreeViewItem 中自动换行?
【发布时间】:2012-02-14 15:16:11
【问题描述】:

这一次,我的问题听起来很简单......如何让文本包装在 WPF TreeViewItem 中?

我有一个简单的HierarchicalDataTemplate,里面只有一个TextBlock

<TextBlock Text="{Binding Value}" TextWrapping="Wrap" />

文本不换行。

我尝试将TextBlockWidth 绑定到TreeViewActualWidth,但是虽然这会使文本换行,但TreeViewItemWidth 不适合@987654331 @ 因为TreeViewPadding。绑定到TreeViewItemActualWidth 具有(不出所料)相同的效果。另一个缺点是即使文本很少的项目也会超出TreeView 范围。

<TextBlock Text="{Binding Value}" TextWrapping="Wrap" Width="{Binding ActualWidth, 
ElementName=TreeView}" />

肯定有更好的方法,比如以某种方式通知TreeViewItemTreeView 的边界......我不敢相信它不会自动知道。但是我该怎么做呢?

更新 >>>

感谢 H.B. 的回答,我设法将 Bd Border 他在 ControlTemplate 中提到的 Grid.ColumnSpan 更改为 2,并设置了宽度,以便文本现在可以很好地换行。问题是我将这个ControlTemplate 用于其他TreeViewItems 中的其他TreeViews 我不想要全宽项目。

我想出的解决方案很简单。我已将TreeViewItem.Tag 值绑定到ControlTemplate 中的Grid.ColumnSpan 属性,如下所示:

<Border Grid.ColumnSpan="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}" 
Name="Bd" Grid.Column="1" ... />

这允许我通过将TreeViewItem.Tag 值分别设置为 2 或 1 来更改 Grid.ColumnSpan 以及 TreeViewItem 的全宽或普通宽度行为。

【问题讨论】:

    标签: wpf word-wrap treeviewitem


    【解决方案1】:

    如果您查看the default templateTreeViewItems,您会看到这样的网格:

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="19"
                              Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <!-- ... -->
    

    如您所见,第三列占用了所有可用空间,而其他列在 Auto 上,标题位于边框内的第二列中:

    <Border Name="Bd"
            Grid.Column="1"
            ...
    

    这意味着该列将变得与标题一样大,对此没有限制。因此,标题只会比TreeView 本身大。

    如果你将Grid.ColumnSpan="2"添加到这个Border,它也会占据第三列,这受剩余空间的限制,因此文本会换行;然而,这会将标题扩展到整个宽度,在选择它时可能看起来有点奇怪。

    当然,您还需要禁用水平滚动:

    <TreeView ScrollViewer.HorizontalScrollBarVisibility="Disabled" ...
    

    【讨论】:

    • 我希望有一个简单的属性,但这成功了,非常感谢。 +1
    • @Sheridan:很高兴有帮助 :) 如果某些东西在默认模板中硬编码,那总是很糟糕...
    猜你喜欢
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 2021-12-22
    • 2012-02-07
    • 2014-08-25
    相关资源
    最近更新 更多