我在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>
这是它正在做的事情。这就是我需要做的事情。
我意识到用户可以手动向下滚动并获取信息,但如果他们选择(例如怀俄明州),则意图选择另一个孩子。滚动应自动打开,以便可以进行选择。
有人可以帮我找到我需要调整的正确属性吗?
答案 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添加了附加事件,每次扩展子节点时都会发生这种事件。事件处理程序检查扩展子节点中的最后一个子节点并将其带入视图。这样,无论数据源如何,都可以完成。
请问,如果您需要任何进一步的帮助,我将很乐意为您提供帮助。