我有自定义项目的wpf TreeView
。
每个节点都是一个wpf边框,里面有一个wpf扩展器。扩展器包含节点的子项,依此类推。所以每个TreeViewNode
都有自己的项目。
TreeViewItem
:用户界面代表:
the outer element: a wpf Border (the node):
/-----------------\
| |
| title(textbox) |
| |
| \/Expander |
| | | |
| | child | |
| | items | |
| ---------- |
| |
\-----------------/
Viewmodel
的{{1}} TreeViewItem
还有ObservableCollection
个。{/ p>
如果我使用TreeviewItem
添加项目,
ObservableCollection<Item>.Add(..)
视图显示包含新项目的节点:它会放大wpf TreeviewItem
并在wpf Border
中显示新项目。
如果我使用Expander
删除Items
,则ObservableCollectionyItem>.Remove(..)
会再次收缩并显示空的扩展程序。
这是我想保留的行为!
问题:我用于Border
:
TextBox
以适合DockPanel.Dock = "Top"
宽度。这会拉伸Border
以适应新的边框宽度。
当我删除子项时,边框的宽度不会减小,因为TextBox
现在更大了。但我希望TextBox
与外边界无关。
当添加子项时,TextBox
应调整到可用空间,
但是当移除子项时,不应该影响边界从捕捉到较小的大小。从TextBox
宽度到任何布局元素都不应该有依赖关系。
怎么做到这一点?
示例:如果我使用TextBox
作为文本框,
它不会增长(不好),但在删除元素时,边框会快速恢复到以前的大小( good )。
如何使文本框的宽度不与wpf自动UI大小相关?顺便说一句,我不想从代码中调整treeviewitems的大小。
答案 0 :(得分:0)
我在这里找到了一个非常有用的提示:
stackoverflow.com/questions/6338315/allow-wpf-grid-cell-content-to-expand-outside-of-the-grid-cell
如果将文本框放在画布中,它不会影响外边框宽度!