She*_*dan 2 wpf word-wrap treeviewitem
这一次,我的问题就像听起来一样简单......你如何在WPF中包含文本TreeViewItem?
我有一个简单HierarchicalDataTemplate的只有一个TextBlock.
<TextBlock Text="{Binding Value}" TextWrapping="Wrap" />
Run Code Online (Sandbox Code Playgroud)
文字没有包装.
我想结合Width的TextBlock到ActualWidth的TreeView,不过虽然这使得文字的环绕中,Width的TreeViewItem不适合的TreeView,因为TreeView有Padding.绑定到ActualWidth的TreeViewItem有(意料之中)相同的效果.另一个缺点是,即使是文字很少的项目也会超出TreeView界限.
<TextBlock Text="{Binding Value}" TextWrapping="Wrap" Width="{Binding ActualWidth,
ElementName=TreeView}" />
Run Code Online (Sandbox Code Playgroud)
当然,必须有一个更好的办法,像不知何故通知TreeViewItem的TreeView的界限......我不能相信它不会自动知道.但是我怎么能这样做呢?
更新>>>
由于HB的答案,我设法改变Grid.ColumnSpan为2对Bd Border,他在提到ControlTemplate它设置宽度,使文本现在包装精美.问题是我在ControlTemplate其他TreeViewItems中使用它TreeView,我不想要全宽度的项目.
我想出的解决方案很简单.我已将TreeViewItem.Tag值绑定到Grid.ColumnSpan属性中,ControlTemplate因此:
<Border Grid.ColumnSpan="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}"
Name="Bd" Grid.Column="1" ... />
Run Code Online (Sandbox Code Playgroud)
这允许我通过将值分别设置为2或1 来改变Grid.ColumnSpan并因此改变全宽度或普通宽度行为.TreeViewItemTreeViewItem.Tag
如果您查看默认模板,TreeViewItems您将看到如下网格:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="19"
Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,第三列占用了所有可用空间而其他列处于打开状态时Auto,标题将放置在边框内的第二列中:
<Border Name="Bd"
Grid.Column="1"
...
Run Code Online (Sandbox Code Playgroud)
这意味着该列将变得与标题一样大,对其没有限制.因此,标题只是比TreeView自己大.
如果你添加Grid.ColumnSpan="2"到这个边框,它也将占据第三列,这受到剩余空间的限制,因此文本将换行; 然而,这将在整个宽度上扩展标题,这在选择它时可能看起来有点奇怪.
当然,您还需要禁用水平滚动:
<TreeView ScrollViewer.HorizontalScrollBarVisibility="Disabled" ...
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
4474 次 |
| 最近记录: |