读书人

TreeViewItem的单击,该怎么解决

发布时间: 2013-04-26 16:27:53 作者: rapoo

TreeViewItem的单击
TreeView下面有几十TreeViewItem

需要响应MouseLeftButtonUp事件,只能给每个TreeViewItem写上MouseLeftButtonUp="TreeViewItem_MouseLeftButtonUp"
这样的???


有没有简便一些的?


[解决办法]
增加灵活性的同时也就增加了复杂性,c++比c#灵活吧,但用起来也比c#复杂吧。

如果每个treeviewitem的事件处理过程都一样的话,那你就可以遍历一下树,然后让这些个items订阅同一个事件了。

有什么更好的方法的话,记得跟大家分享一下。
[解决办法]
第一, 你的TreeViewItem是写死的嘛? 动态加载TreeViewItem只需要指定一次MouseLeftButtonDown事件

第二, TreeViewItem的单机应该是SelectedItem事件
[解决办法]

引用:
第一, 你的TreeViewItem是写死的嘛? 动态加载TreeViewItem只需要指定一次MouseLeftButtonDown事件

第二, TreeViewItem的单机应该是SelectedItem事件


对,按你的需求,可以用SelectedItemChanged事件来实现的,可能楼主有什么特殊要求?
[解决办法]
for(int i=0;i<10;i++)
{
TreeViewItem item=new TreeViewItem();
TreeViewItem.SelectedItem += new SelectedItem事件;
TreeView.Items.Add(item);
}

void SelectedItem事件(XX,XX)
{
......
}


写个伪代码 楼主看懂没?
[解决办法]
引用:
for(int i=0;i<10;i++)
{
TreeViewItem item=new TreeViewItem();
TreeViewItem.SelectedItem += new SelectedItem事件;
TreeView.Items.Add(item);
}

void SelectedItem事件(XX,XX)
{
......
}


……


你这个只有节点一级。。给你看看我的...
private void AddNods(int Id, TreeViewItem treeViewItem)
{
List<TypeContracts.Type> childList = new List<TypeContracts.Type>();
foreach(TypeContracts.Type type in allList)
{
if (type.ParentId == Id)
{
childList.Add(type);
}
}
if (childList.Count > 0)
{
var _dataTemplate = this.LayoutRoot.Resources["TreeViewItemStyle"] as Style;
foreach (TypeContracts.Type type in childList)
{
TreeViewItem childTvi = new TreeViewItem() { Header = type, ItemContainerStyle = _dataTemplate };


if (treeViewItem != null) //添加子节点
{
treeViewItem.Items.Add(childTvi);
}
else //添加父节点
{
tv.Items.Add(childTvi);
}
AddNods(type.Id, childTvi); //添加子节点
}
}
}

不管你多少级节点, 全部读出来,一个递归调用

读书人网 >CAD教程

热点推荐