导航树的节点选择问题
前台
<UserControl Loaded = "UserControl_Loaded">
<TreeView x:Name = "_treeView">
<TreeViewItem header = "测试1" x:Name = "_tvi"/>
<TreeViewItem header = "测试2"/>
<TreeViewItem header = "测试3"/>
</TreeView>
</UserControl>
后台
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
_tvi.IsSelected = true;
设置后选择的结点后,_treeView.SelectedItem为空,很奇怪?
}
问题1 _treeView.SelectedItem为什么为空,是不是前台用户触发的与后台代码写的不一样。
问题2 如果不用微软的Tookit怎样实现TreeView的结点拖拽
[解决办法]
_treeView.SelectedItem为空可能是一个bug吧,不过加一个扩展方法可以获取
public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); _tvi.IsSelected = true; object obj = _treeView.GetSelectedItem(); } } public static class TreeViewExtend { public static object GetSelectedItem(this TreeView treeView) { if (treeView.SelectedItem == null) { foreach (object ti in treeView.Items) { if (((TreeViewItem)ti).IsSelected) { return ti; } } } else { return treeView.SelectedItem; } return null; } }不过获取到的项IsSelected 是null.
[解决办法]
问题1: treeView.SelectedItem为空,你可以debug一下,看看SelectionChanged,Sender中是否有值。
问题2: 如果不用微软的Tookit怎样实现TreeView的结点拖拽也可以实现拖拽,这里有个开源项目,可以参考。http://www.silverlightchina.net/html/works/2009/0914/181.html
[解决办法]
楼上能不能把问题在描述的详细点,你在哪里得到选中的值?你如果是在页面上设置好 isSelected="true"这个属性后,在后台通过tree.selecteditem是可以得到值的!
[解决办法]
如果动态生成树的话,在后台动态设置选中节点,是可以得到的!