首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

导航树的节点选择有关问题

2012-03-18 
导航树的节点选择问题前台UserControl Loaded UserControl_LoadedTreeView x:Name _treeView

导航树的节点选择问题
前台
<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吧,不过加一个扩展方法可以获取

C# code
    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是可以得到值的!
[解决办法]
如果动态生成树的话,在后台动态设置选中节点,是可以得到的!

热点排行