TreeView 做类似导航的功能

heifengxia 2010-04-20 06:41:16
我在项目中做了个TreeView 的导航
代码如下
<control:TreeView x:Name="treeView" SelectedItemChanged="treeView_SelectedItemChanged" >
<control:TreeViewItem Header="教师管理系统 (Control)">
<control:TreeViewItem Header="Scores" Tag="PageDemo"/>
</control:TreeViewItem>
</control:TreeView>
<Grid x:Name="pnl" Grid.Column="2" Grid.Row="1">


</Grid>
----------------------------
我想当我点击了Scores时,在 pnl 中新增加Scores容器.

我cs代码
private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var treeView = sender as System.Windows.Controls.TreeView;
string tag = ((System.Windows.Controls.TreeViewItem)treeView.SelectedItem).Tag.ToString();

if (tag == null)
{
return;
}


System.Type type = typeof(Page).Assembly.GetType(tag,true);
UIElement element = Activator.CreateInstance(type) as UIElement;

this.pnl.Children.Clear();
this.pnl.Children.Add(element);

pageScroll.ScrollToVerticalOffset(0);
}

----------------------------------
问题出来了.type=null 不能获取到tag 的类型.

还请高手指点.
(SL3)
...全文
77 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
websco 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mengkzhaoyun 的回复:]
最后你传递的name应该是完全限定名,带命名空间的
[/Quote]
严重支持。

说一下个人观点,看到楼主的 Tag="PageDemo" ,马上令我联想到 HyperLinkButton 中的 NavigateUri,NavigateUri 就可以只用一个 class 的部分名称来表示。

而且即是想做导航,应是使用 Page 不是使用 UserControl 吧(当然这没有强制要求),如果是使用Page,建议楼主更改一下,在 TreeView 中使用 HierarchicalDataTemplate,里面再使用 HyperLinkButton 。个人认为这是微软比较推荐的做法。
mengKzhaoyun 2010-04-20
  • 打赏
  • 举报
回复
此方法仅搜索当前程序集实例。name 参数包括命名空间,但不包括程序集。



最后你传递的name应该是完全限定名,带命名空间的,如果带了命名空间还找不到问题就复杂了,MS自定义了6个错误,额.......楼主你到底犯了哪个错....
mengKzhaoyun 2010-04-20
  • 打赏
  • 举报
回复
ArgumentException name 无效。

ArgumentNullException name 为 nullNothingnullptrunitnull 引用(在 Visual Basic 中为 Nothing)。

FileNotFoundException name 需要一个无法找到的依赖程序集。

FileLoadException name 需要一个依赖程序集,该程序集已找到,但无法加载。

- 或 -

当前程序集被加载到只反射上下文中,name 需要一个未预先加载的依赖程序集。

BadImageFormatException name 需要一个依赖程序集,但该文件不是一个有效的程序集。

- 或 -

name 需要一个针对高于当前加载版本的运行时版本编译的依赖程序集。

MemberAccessException 通过如 Type..::..InvokeMember 等机制以后期绑定的形式调用此方法

mengKzhaoyun 2010-04-20
  • 打赏
  • 举报
回复
小小新手看了帮助如下:
public virtual Type GetType(
string name
)

参数
name
类型:System..::..String

该类型的全名。

返回值
类型:System..::..Type

表示指定类的 Type 对象,若未找到该类则为 nullNothingnullptrunitnull 引用(在 Visual Basic 中为 Nothing)。

8,742

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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