我有一个TreeView
带有自定义项目的 wpf。每个节点都是一个 wpf 边框,里面有一个 wpf 扩展器。扩展器包含节点的子项,依此类推。所以每个TreeViewNode
里面都有它的物品。
TreeViewItem
:用户界面表示:
the outer element: a wpf Border (the node):
/-----------------\
| |
| title(textbox) |
| |
| \/Expander |
| | | |
| | child | |
| | items | |
| ---------- |
| |
\-----------------/
的Viewmodel
forTreeViewItem
有一个ObservableCollection
进一步TreeviewItem
的 s。
如果我使用 添加项目ObservableCollection<Item>.Add(..)
,TreeviewItem
视图会显示带有新项目的节点:它会放大 wpfBorder
并在 wpf 中显示新项目Expander
。
如果我删除Items
using ObservableCollectionyItem>.Remove(..)
,Border
则再次缩小并显示一个空扩展器。
这是我要保持的行为!
问题:我用于TextBox
:
DockPanel.Dock = "Top"
以适应Border
宽度。这会拉伸TextBox
以适应新的边框宽度。当我删除一个子项时,边框的宽度不会减小,因为TextBox
现在更大了。但我希望TextBox
独立于外部边界。
应该在TextBox
添加子项时调整到可用空间,但在删除子项时不应影响边框恢复到较小的大小。TextBox
宽度不应依赖于任何布局元素。如何做到这一点?
示例:如果我DockPanel.Dock="Left"
用于文本框,它不会增长(不好),但在删除元素时边框会恢复到原来的大小(好)。
如何使文本框的宽度与 wpf 自动 UI 大小无关?顺便说一句,我不想从代码中调整 treeviewitems 的大小。