Silverlight 4: TreeView / HierarchicalDataTemplate / AutoExpand Issue - PullRequest
0 голосов
/ 06 июля 2011

У меня есть элемент управления treeview в моем приложении silverlight, которое использует 2 HierarchicalDataTemplate (s) для отображения данных в требуемом формате. Я хотел бы, чтобы это дерево автоматически расширялось при первом открытии (предпочтительно фрагмент кода, который я могу вызывать в любое время, когда захочу).

Любые альтернативы данному коду также приветствуются.

<sdk:TreeView x:Name="tvPageManager" Style="{StaticResource PageManagerStyle}"                                       
                        ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Auto">
                        <sdk:TreeView.ItemTemplate>
                            <sdk:HierarchicalDataTemplate ItemsSource="{Binding KeyPoints, Mode=TwoWay}">
                                <StackPanel Orientation="Horizontal">
                                    <ToolTipService.ToolTip>
                                        <ToolTip Content="{Binding PageName}" Style="{StaticResource ToolTipStyle}"/>
                                    </ToolTipService.ToolTip>
                                    <Image x:Name="imgPageIcon" Source="{Binding PageIconImage}" Style="{StaticResource PageIconStyle}" Tag="{Binding BurstPageId, Mode=TwoWay}" />
                                    <TextBlock x:Name="tbkLiteralTextPage" Text="Page " Style="{StaticResource PageNameLiteralTextBlockStyle}" />
                                    <TextBox x:Name="tbPageName" Text="{Binding PageName, Mode=TwoWay}" Style="{StaticResource PageNameTextBoxStyle}" />
                                </StackPanel>
                                <sdk:HierarchicalDataTemplate.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <Image x:Name="imgKeypointIcon" Source="../Assets/Images/bullet_yellow.png" Style="{StaticResource KeypointIconStyle}"/>
                                            <TextBlock x:Name="tbkKeypointTitle" Text="{Binding Title, Mode=TwoWay}" Style="{StaticResource KeypointNameTextBlockStyle}"  />
                                            <StackPanel x:Name="spnlMoveImages" Orientation="Horizontal" HorizontalAlignment="Right" Width="30">
                                                <Image x:Name="imgMoveUp" Source="../Assets/Images/up_arrow.png" Style="{StaticResource MoveIconsStyle}" Tag="{Binding KeyPointId}"/>
                                                <Image x:Name="imgMoveDn" Source="../Assets/Images/down_arrow.png" Style="{StaticResource MoveIconsStyle}" Tag="{Binding KeyPointId}"/>
                                            </StackPanel>
                                        </StackPanel>
                                    </DataTemplate>
                                </sdk:HierarchicalDataTemplate.ItemTemplate>
                            </sdk:HierarchicalDataTemplate>
                        </sdk:TreeView.ItemTemplate>
                    </sdk:TreeView>

Этот элемент управления привязан к списку Observable класса BurstPage. Полная структура данных выглядит так:

Родительским элементом является объект Burst, который содержит от 1 до n объектов BurstPage. Любой данный BurstPage может содержать от 1 до n объектов Keypoint.

BurstPage.Name (скажем, 1) Keypoint.Name (скажем, A) Keypoint.Name (скажем, B) Keypoint.Name (скажем, C) BurstPage.Name (скажем, 2) BurstPage.Name (скажем, 3) Keypoint.Name (скажем, D) Keypoint.Name (скажем, E)

Ответы [ 2 ]

0 голосов
/ 07 июля 2011

Вы правы, XAML будет только расширять дерево изначально, добавляя новые узлы, которые я использую;

private void ExpandNode()
{
    if (branchSelector < 1)
        return;

    TreeViewItem item = null;
    int itemAtIndex = 0;

    //Update tree layout
    this.tvName.UpdateLayout();

    foreach (var branch in this.tvName.Items)
    {
        item = (this.tvName.GetContainerFromItem(this.tvName.Items[itemAtIndex]) as TreeViewItem);
        if (item != null && item.HasItems)
        {
            if ((branch as Model.BranchBusinessObject).Id== branchSelector && (!item.IsExpanded))
                item.IsExpanded = true;
        }
        itemAtIndex++;
    }
}
0 голосов
/ 06 июля 2011

Мне кажется, что в вашем сообщении пропущено много кода ...

Но я думаю, что вам может пригодиться следующее: one-more-platform-разница-more-or-less-tamed

В нем есть несколько хороших указателей на то, как можно связывать элементы управления, такие как древовидная структура, и работать с ними в коде.

...