加载UserControl的时候抛出XamlParseException 异常

亡灵术士 2013-03-08 03:44:58
我通过反射加载UserControls的时候
var typeName = viewCache.ClassName.Substring(0, index);
var asmClassName = _AssemblyCacheList[GetAssemblyName(viewCache.ClassName)];
var viewObj = asmClassName.CreateInstance(typeName);

执行到InitializeComponent();会抛出异常(这个页面是一个新建的空页面)
public partial class TestConfig : UserControl
{

public TestConfig()
{
InitializeComponent();
}

}


如果我直接在App启动这个页面,就不会提示这个异常了
查了好多天,看了好多资料都不知道是什么原因,还请大神们帮忙看看,灰常感谢啊!....
...全文
18786 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
饺子醋 2014-08-08
  • 打赏
  • 举报
回复
楼主正解,我也遇到了个一样的问题,复制粘贴惹的祸
亡灵术士 2014-03-26
  • 打赏
  • 举报
回复
原来是使用了附加属性,但没有加载附加属性的Dll 导致运行的时候报错
亡灵术士 2013-03-20
  • 打赏
  • 举报
回复
我在想 错误应该是在 XAML页面展示的时候 但是就找不出为什么?
亡灵术士 2013-03-20
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
建议你把 var typeName = viewCache.ClassName.Substring(0, index); 先改成 var typeName = "SLPlatform.SLUI.ProfessionUI.TestConfig"; 试试看。 如果程序“正常”通过,你至少就不会觉得诡异了,因为程序的错误位置根本就是在这一条而不是“反射”那条语句……
我试了这个方法 还是会报错... 我上MSDN查..说有可能是版本不一致导致的...但是项目都是.net 4.5的框架 还请指教..
  • 打赏
  • 举报
回复
恩当然,这个意思就是说,假设 ClassName 是异步加载的,那么你就需要把属性改为方法,例如定义为
public void ClassName(Action<List<string>> callback)
{
   ....
}
这种。 这其实很常见。 比如说,假设这里边的机制涉及到它需要到网站上去下载一个txt配置文件,那么这个ClassName就肯定是应该实现为回调形式的。
  • 打赏
  • 举报
回复
不知道你的内部机制是什么,随便说一下: silverlight中大量地使用异步操作。有时候看似简单的属性查询,你可能需要写成回调,例如:
 viewCache.ClassName(result=>
  {
    var typeName = result.Substring(0, index);            
    var asmClassName = _AssemblyCacheList[GetAssemblyName(viewCache.ClassName)];
    var viewObj = asmClassName.CreateInstance(typeName);
  });
  • 打赏
  • 举报
回复
建议你把 var typeName = viewCache.ClassName.Substring(0, index); 先改成 var typeName = "SLPlatform.SLUI.ProfessionUI.TestConfig"; 试试看。 如果程序“正常”通过,你至少就不会觉得诡异了,因为程序的错误位置根本就是在这一条而不是“反射”那条语句。
亡灵术士 2013-03-12
  • 打赏
  • 举报
回复
还有一个很奇怪的问题
如果我断点到 var viewObj = asmClassName.CreateInstance(typeName); 这一步
然后用VS的 快速监视 表达式输入asmClassName.CreateInstance("SLPlatform.SLUI.ProfessionUI.TestConfig") 按确定..页面就能正确加载出来了...太诡异了..查了一个多星期了..还是查不出为什么啊...
求各位大神指点指点...

亡灵术士 2013-03-09
  • 打赏
  • 举报
回复
我试了一下 你的方法..也是不行.. 问题好像不是出在反射... 而是出现在加载UI的时候出错的.. 我换了 直接从xaml文件加载UI也同样报错...
jv9 2013-03-09
  • 打赏
  • 举报
回复
首先不用反射,调试你的页面是否正常启动。 如果正常,测试反射代码, 请参考 http://silverlightchina.net/html/tips/2010/0630/1364.html http://silverlightchina.net/plus/search.php?keyword=%B7%B4%C9%E4&searchtype=titlekeyword&channeltype=0&orderby=&kwtype=0&pagesize=10&typeid=0&TotalResult=22&PageNo=1
#blackheart 2013-03-08
  • 打赏
  • 举报
回复
我试了下没啥问题,是不是你用的封装好的反射类库的问题。 你用这试试 var assembly = System.Reflection.Assembly.LoadFrom(dllpath); Type type = assembly.GetType(fullName); var obj = Activator.CreateInstance(type);
亡灵术士 2013-03-08
  • 打赏
  • 举报
回复
就是一个 新建的空xaml页面
亡灵术士 2013-03-08
  • 打赏
  • 举报
回复
<UserControl x:Class="SLPlatform.SLUI.ProfessionUI.TestConfig" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> </Grid> </UserControl>
#blackheart 2013-03-08
  • 打赏
  • 举报
回复
代码贴出来看看
#blackheart 2013-03-08
  • 打赏
  • 举报
回复
你的xaml文件中引用其他程序集没

8,757

社区成员

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

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