Почему мои элементы WPF TreeView выглядят так? - PullRequest
0 голосов
/ 22 октября 2010

При изучении WPF я (возможно, неразумно) решил отображать свои данные XML (разумно анализируемые с помощью LINQ) в TreeView.Но когда я загружаю его в TreeView, он выглядит следующим образом:

alt text

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, но я не совсем уверен (верхняяузлы уровня выглядят хорошо), но это может быть связано с тем, как я создаю дочерние узлы.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Пожалуйста, не углубляйтесь в разговоры о привязке дерева.Для этого конкретного приложения данные НИКОГДА не будут состоять из более чем заголовка категории (узлов верхнего уровня) и элементов, находящихся непосредственно под ними.Что я хочу знать, так это , почему узлы верхнего уровня выглядят хорошо, а созданные мной отличаются от них.

Я пытался устранить заполнение как TreeViewItem, так и поля и отступа в TextBlock, но безрезультатно.

(Visual STudio 2008 SP1, .NET 3.5, Win7)

Ответы [ 2 ]

2 голосов
/ 19 мая 2018

Попробуйте это Удалить 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);
        }

Это работа для меня.

2 голосов
/ 22 октября 2010

Я думаю, это потому, что вы добавляете своих детей в другой (избыточный) элемент дерева. Поскольку этот элемент дерева содержит только один дочерний элемент и не содержит заголовка, вы получаете дополнительный уровень в дереве, который необходимо развернуть.

Попробуйте следующее:

        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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...