我有一个TreeView,其中一个Hierarchical Data Template绑定到一个可观察的集合。当集合完成加载时,我运行一些选择特定TreeViewItem的代码,然后应该将焦点带到TreeView。这个想法是用户应该能够使用箭头键滚动TreeView中的条目。 TreeView在填充时似乎具有焦点,但是arrtow键不会滚动选择。如果随后在任何地方单击TreeView,则箭头键会起作用,这表明TreeView实际上没有焦点。相关代码是:
Dispatcher.BeginInvoke(delegate
{
TreeViewAutomationPeer trvAutomation =
(TreeViewAutomationPeer)TreeViewAutomationPeer.CreatePeerForElement(TreeViewIndex);
IScrollProvider scrollingAutomationProvider =
(IScrollProvider)trvAutomation.GetPattern(PatternInterface.Scroll);
IndexEntry highScoreEntry = _currentIndexViewModel.HighScoreEntry;
TreeViewItem myItem = TreeViewIndex.ContainerFromItem(highScoreEntry);
TreeViewIndex.Focus();
myItem.IsSelected = true;
if (scrollingAutomationProvider.HorizontallyScrollable)
scrollingAutomationProvider.SetScrollPercent(0, scrollingAutomationProvider.VerticalScrollPercent);
TreeViewIndex.Focus();
});
非常感谢任何帮助。
答案 0 :(得分:0)
我在xaml中有这段代码:
<ScrollViewer Name="_treeScroll">
<controls:TreeView x:Name="_tree"/>
</ScrollViewer>
当我想扩展一些treeItem时。我跑这个
private void ExpandTreeViewItem(TreeViewItem tvi)
{
tvi.IsSelected = true;
tvi.IsExpanded = true;
tvi.UpdateLayout();
_treeScroll.ScrollIntoView(tvi);
}
希望它的帮助......