【发布时间】:2012-02-14 15:16:11
【问题描述】:
这一次,我的问题听起来很简单......如何让文本包装在 WPF TreeViewItem 中?
我有一个简单的HierarchicalDataTemplate,里面只有一个TextBlock。
<TextBlock Text="{Binding Value}" TextWrapping="Wrap" />
文本不换行。
我尝试将TextBlock 的Width 绑定到TreeView 的ActualWidth,但是虽然这会使文本换行,但TreeViewItem 的Width 不适合@987654331 @ 因为TreeView 有Padding。绑定到TreeViewItem 的ActualWidth 具有(不出所料)相同的效果。另一个缺点是即使文本很少的项目也会超出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