Wpf 如何查看扩展的TreeView项目的所有TreeView项目
在我的Wpf 如何查看扩展的TreeView项目的所有TreeView项目,wpf,treeview,Wpf,Treeview,在我的窗口中我有树状视图TreeView.ItemsSource绑定到我的数据(分层数据结构)。当我展开当前滚动条位置底部的一些TreeViewItem时,我的子项被隐藏,我必须滚动才能看到它们。是否有任何方法可以查看扩展项的所有子项 我尝试过这个,但没有成功: public void TreeViewItem_Expanded(object sender, RoutedEventArgs e) { TreeViewItem tvi = e.OriginalSource as TreeV
窗口中
我有树状视图
TreeView.ItemsSource
绑定到我的数据(分层数据结构)。当我展开当前滚动条位置底部的一些TreeViewItem
时,我的子项被隐藏,我必须滚动才能看到它们。是否有任何方法可以查看扩展项的所有子项
我尝试过这个,但没有成功:
public void TreeViewItem_Expanded(object sender, RoutedEventArgs e)
{
TreeViewItem tvi = e.OriginalSource as TreeViewItem;
if (tvi != null)
{
Debug.WriteLine("TreeNode '{0}' was expanded", tvi.Header);
tvi.BringIntoView();
}
}
基本上,选择最后一个子项,并在展开项时将其显示在视图中。如果它没有子项,则将该项本身置于视图中 棘手的部分是,在执行事件时,子项不一定可用,因此我建议您检查
ItemContainerGenerator.Status
,如果尚未完成,请订阅ItemContainerGenerator.StatusChanged
事件
下面的代码只使用静态项进行测试,如果它对动态数据源造成问题,我可能需要重新检查一些细节
void TreeViewItem_Expanded(object sender, RoutedEventArgs e)
{
TreeViewItem tvi = e.OriginalSource as TreeViewItem;
if (tvi != null)
{
if (tvi.HasItems)
{
if (tvi.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
{
BringLastItemIntoView(tvi.ItemContainerGenerator);
}
else
{
tvi.ItemContainerGenerator.StatusChanged += ItemContainerGenerator_StatusChanged;
}
}
else
{
tvi.BringIntoView();
}
}
}
void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
var s = sender as ItemContainerGenerator;
if (s.Status == GeneratorStatus.ContainersGenerated)
{
BringLastItemIntoView(s);
s.StatusChanged -= ItemContainerGenerator_StatusChanged;
}
}
void BringLastItemIntoView(ItemContainerGenerator generator)
{
var tvi = generator.ContainerFromItem(generator.Items.LastOrDefault()) as TreeViewItem;
if (tvi != null)
{
tvi.BringIntoView();
}
}