在学习WPF时,我(可能是不明智的)选择在TreeView中显示我的XML数据(用LINQ明智地解析)。但是当我将它加载到TreeView中时,它看起来像这样:
XAML如下:
<TreeView Name="StoryTree">
<TreeViewItem Name="TreeGeneral" Header="General"/>
<TreeViewItem Name="TreeCharacters" Header="Characters" />
<TreeViewItem Name="TreeEvents" Header="Events" />
<TreeViewItem Name="TreeFactions" Header="Factions" />
<TreeViewItem Name="TreeLocations" Header="Locations" />
<TreeViewItem Name="TreePlots" Header="Plots" />
<TreeViewItem Name="TreeReferences" Header="References" />
<TreeViewItem Name="TreeScenes" Header="Scenes" />
</TreeView>
在代码隐藏中,我使用一个简单的例程将项目加载到树视图中,如下所示:
private void Update(StoryItem[] items, TreeViewItem parentNode)
{
// Suppress updating if there are no actual changes.
if (Changed(items, parentNode))
{
// Remove all items from the child node.
ClearItem(parentNode);
// Reinsert the child nodes.
foreach (var item in items)
{
// Create a TreeViewItem and insert it into the TreeView.
// Note that the item must support double clicking so that the
// user can open the item. Also, we want to support tooltips
// for the items so that the summary text (if any) will display
// when the user hovers over the item with the mouse.
TreeViewItem treeItem = new TreeViewItem();
TextBlock block = new TextBlock();
block.Text = item.Name;
block.ToolTip = item.Summary;
block.TextTrimming = TextTrimming.WordEllipsis;
treeItem.Items.Add(block);
parentNode.Items.Add(treeItem);
}
}
}
我有点怀疑这是WPF中的“级联样式继承”,但我不完全确定(顶级节点看起来很好),但它可能与我创建子项的方式有关节点。
声明: 请不要深入研究绑定树视图的讨论。对于此特定应用,数据 NEVER 将包含多个类别标题(顶级节点)和紧接其下方的项目。我想知道的是为什么顶级节点看起来很好,我创建的节点与它们不同。
我已经尝试消除TreeViewItem和margin&amp;的填充。在TextBlock上填充,两者都无济于事。
(Visual STudio 2008 SP1,.NET 3.5,Win7)
答案 0 :(得分:2)
我认为这是因为您将孩子添加到另一个(冗余)树项目中。由于该树项只包含一个子项而没有标题,因此您需要在树中获得需要展开的额外级别。
尝试以下方法:
foreach (var item in items)
{
// Create a TreeViewItem and insert it into the TreeView.
// Note that the item must support double clicking so that the
// user can open the item. Also, we want to support tooltips
// for the items so that the summary text (if any) will display
// when the user hovers over the item with the mouse.
TreeViewItem child = new TreeViewItem();
child.Header = item.Name;
child.ToolTip = item.Summary;
parentNode.Items.Add(block);
}
答案 1 :(得分:2)
试试这个 删除TextBlock block = new TextBlock();
foreach (var item in items)
{
TreeViewItem treeItem = new TreeViewItem();
treeItem .Header = item.Name;
treeItem .ToolTip = item.Summary;
parentNode.Items.Add(treeItem);
}
这对我有用。