当我的弹出窗口打开时为什么它不显示treeview的全部内容?

时间:2013-04-15 14:08:12

标签: wpf popup treeview scrollbar scrollviewer

我在TreeView内有一个Popup。我们的想法是,用户将从TreeView中进行选择,并能够查看任何已打开的节点。这是代码:

<Popup PlacementTarget="{Binding ElementName=TBXProjection}" Style="{StaticResource ProjPopupStyle}" VerticalOffset="27" HorizontalOffset="-262" Margin="0,0,465,279" Name="PopupProjection" AllowsTransparency="True" Placement="Top">
    <Grid>
        <Border BorderThickness="2" Background="DodgerBlue" BorderBrush="DodgerBlue" Padding="0" CornerRadius="6">
            <ScrollViewer Height="275" Name="scrollViewer1" Width="260" BorderBrush="Black" Background="DodgerBlue">
                <TreeView Name="dirTree" ItemsSource="{Binding Source={StaticResource xmldata}, XPath=.}" VirtualizingStackPanel.IsVirtualizing="False" VirtualizingStackPanel.VirtualizationMode="Standard" SelectedItemChanged="dirTree_SelectedItemChanged"/>
            </ScrollViewer>
        </Border>
    </Grid>
</Popup>

这是它正在做的事情。这就是我需要做的事情。

Here is what the popup/treeview is doing Here is what it's supposed to do.

我意识到用户可以手动向下滚动并获取信息,但如果他们选择(例如怀俄明州),则意图选择另一个孩子。滚动应自动打开,以便可以进行选择。

有人可以帮我找到我需要调整的正确属性吗?

1 个答案:

答案 0 :(得分:1)

我不知道任何你想要的财产。

但是,您可以在要显示的BrinIntoView的最后一个上使用TreeViewItem方法。每次打开节点时,检查最后一个子元素是否可见,如果不是,则使用我链接的方法。以下是对代码的修改,以实现您的目标:

XAML部分:

<TreeView Name="dirTree" ItemsSource="{Binding Source={StaticResource xmldata}, XPath=.}" VirtualizingStackPanel.IsVirtualizing="False"
                                      VirtualizingStackPanel.VirtualizationMode="Standard" SelectedItemChanged="dirTree_SelectedItemChanged" TreeViewItem.Expanded="ShowMyLastChild"/>

C#部分:

    private void ShowMyLastChild(object sender, RoutedEventArgs e)
    {
        ((TreeViewItem)((TreeViewItem)(e.Source)).Items.GetItemAt(((TreeViewItem)(e.Source)).Items.Count - 1)).BringIntoView();
    }

在上面的代码中,我向TreeView添加了附加事件,每次扩展子节点时都会发生这种事件。事件处理程序检查扩展子节点中的最后一个子节点并将其带入视图。这样,无论数据源如何,都可以完成。

请问,如果您需要任何进一步的帮助,我将很乐意为您提供帮助。