2

我有一个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>

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

这是弹出/树视图正在做的事情这是它应该做的。

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

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

4

1 回答 1

1

我不知道有什么属性可以满足您的要求。

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

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 添加了附加事件,每次展开它的子节点时都会发生该事件。事件处理程序检查展开的子节点中的最后一个子节点并将其显示在视图中。这样,无论数据源如何,您都可以完成它。

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

于 2013-04-15T15:08:19.827 回答