WPF动态生成TreeView 之后点击树中的一个节点,触发事件问题

caolei616 2014-03-24 09:09:54
先从数据库中读取数据,之后动态生成一个TreeView ,方法就是网上通用的 写一个递归来实现,我改的就是在TreeViewItem加一个StackPanel,在StackPanel中加一个image和textblock。大概代码如下
public void CreateTreeViewRecursive(ItemCollection items, DataTable dataSource, int parentid)
{
string filter;//定义一个过滤器
filter = string.Format("Menu_ParentId={0}", parentid);
DataRow[] drarr = dataSource.Select(filter);//将过滤的ID放入数组中
TreeViewItem tvitem;
foreach (DataRow dr in drarr)//递归循环查询出数据
{

tvitem = new TreeViewItem();// TreeNode();
StackPanel sp = new StackPanel();
sp.Orientation = Orientation.Horizontal;
Image image = new Image();
image.Height = 10;
image.Width = 10;
BitmapImage bi3 = new BitmapImage();
bi3.BeginInit();
bi3.UriSource = new Uri("IMG.png", UriKind.Relative);
bi3.EndInit();
image.Stretch = Stretch.Fill;
image.Source = bi3;
TextBlock tb = new TextBlock();

tb.Text = dr["Menu_Name"].ToString();//给textblock的text赋值
tvitem.Tag = Convert.ToInt32(dr["Menu_Id"]);
sp.Children.Add(image);
sp.Children.Add(tb);
tvitem.Header = sp;
items.Add(tvitem);//加入节点
CreateTreeViewRecursive(tvitem.Items, dataSource, Convert.ToInt32(tvitem.Tag));
}
}
之后就可以实现下列效果

我现在想实现 比如说点击北京那个item,MessageBox一个框,上面内容是北京(点击一个节点怎么触发相关事件)
我前台代码就一个数
<TreeView Name="Menu_TV" Grid.RowSpan="2" ></TreeView>
...全文
1454 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
奋进的小鸟 2015-07-10
  • 打赏
  • 举报
回复
这个函数Menu_TV_SelectedItemChanged是什么原理?
灬浪子灬 2014-03-25
  • 打赏
  • 举报
回复
private void Menu_TV_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { string value =(sender as StackPanel).tag.tostring() ; MessageBox.Show(value); }
灬浪子灬 2014-03-25
  • 打赏
  • 举报
回复
引用 楼主 caolei616 的回复:
先从数据库中读取数据,之后动态生成一个TreeView ,方法就是网上通用的 写一个递归来实现,我改的就是在TreeViewItem加一个StackPanel,在StackPanel中加一个image和textblock。大概代码如下 public void CreateTreeViewRecursive(ItemCollection items, DataTable dataSource, int parentid) { string filter;//定义一个过滤器 filter = string.Format("Menu_ParentId={0}", parentid); DataRow[] drarr = dataSource.Select(filter);//将过滤的ID放入数组中 TreeViewItem tvitem; foreach (DataRow dr in drarr)//递归循环查询出数据 { tvitem = new TreeViewItem();// TreeNode(); StackPanel sp = new StackPanel(); sp.Orientation = Orientation.Horizontal; Image image = new Image(); image.Height = 10; image.Width = 10; BitmapImage bi3 = new BitmapImage(); bi3.BeginInit(); bi3.UriSource = new Uri("IMG.png", UriKind.Relative); bi3.EndInit(); image.Stretch = Stretch.Fill; image.Source = bi3; TextBlock tb = new TextBlock(); tb.Text = dr["Menu_Name"].ToString();//给textblock的text赋值 tvitem.Tag = Convert.ToInt32(dr["Menu_Id"]); sp.tag=dr["Menu_Name"].ToString(); sp.Children.Add(image); sp.Children.Add(tb); tvitem.Header = sp; items.Add(tvitem);//加入节点 CreateTreeViewRecursive(tvitem.Items, dataSource, Convert.ToInt32(tvitem.Tag)); } } 之后就可以实现下列效果 我现在想实现 比如说点击北京那个item,MessageBox一个框,上面内容是北京(点击一个节点怎么触发相关事件) 我前台代码就一个数 <TreeView Name="Menu_TV" Grid.RowSpan="2" ></TreeView>
引用 2 楼 tianchangli 的回复:
private void Menu_TV_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { string value =sender as StackPanel ; MessageBox.Show(value); } 这样你试试 你点击treeview上的Item应该就自动执行这个方法。不行的话明儿在弄吧。
这样就OK了
格拉 2014-03-25
  • 打赏
  • 举报
回复
都WPF了还用WINFORM的思维,你直接用模板不好吗
被风吹的竹 2014-03-24
  • 打赏
  • 举报
回复
对了 记得给俺分呀 你这个提问的方法相当好
被风吹的竹 2014-03-24
  • 打赏
  • 举报
回复
private void Menu_TV_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { string value = (string)Menu_TV.SelectedValue; MessageBox.Show(value); } 这样你试试 你点击treeview上的Item应该就自动执行这个方法。不行的话明儿在弄吧。
caolei616 2014-03-24
  • 打赏
  • 举报
回复
大神求指教!!!!!!!!!!!!1

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧