2010-05-21 58 views
14

我想在我的Silverlight应用程序使用一个第三方组件,当我尝试创建控件的实例,我得到一个XamlParseException:如何调试XamlParseException?

{System.Windows.Markup.XamlParseException: **Set property 'System.Windows.FrameworkElement.Style' threw an exception.** [Line: 0 Position: 0] 
---> System.Windows.Markup.XamlParseException: **Elements in the same ResourceDictionary cannot have the same x:Key** [Line: 1739 Position: 47]  
at MS.Internal.XcpImports.CreateFromXaml(UnmanagedMemoryStream stream, String sourceAssemblyName, boolean createNamescope, Boolean requireDefaultNamespace, Boolean allowEventHandlers)  
at System.Windows.Controls.Control.GetBuiltInStyle(IntPtr nativeTarget, IntPtr& nativeStyle)  
--- End of inner exception stack trace ---  
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)  
at SpellCheckerSample.StandardSpellDialog.InitializeComponent()  
at SpellCheckerSample.StandardSpellDialog..ctor()} 

如何调试呢?我如何知道1739号文件的位置?

回答

2

原来我的具体问题是,ComponentOne的组件只的Silverlight 4下工作。一旦我改变了对目标SL4它的所有工作。

+0

多么奇怪的错误报告虽然 – 2010-05-21 04:07:47

+1

是的,并且浪费大量时间!感谢您的建议。 – 2010-05-21 06:17:46

7

可能有点找不到。基本上尽量从调试器收集尽可能多的细节。

  1. 将调试器设置为打破XamlParseException
  2. 看看这个callstack。冒犯控件的构造函数可能位于callstack上。
  3. 当暂停时,转到本地调试窗口,查看该函数的任何参数是否更多地显示这是哪个组件。
  4. 如果不下来双击一个堆栈条目并转到步骤3
  5. 3和4

我写了这个之后,我意识到控制的构造上确实调用堆栈重复步骤和它是SpellCheckerSample。很可能它是该控件的.XAML页面。如果您可以访问源文件,则文件名最有可能类似于SpellCheckerSample.xaml

错误本身非常简单,看起来像在同一个ResourceDictionary中使用同一个键定义的多个东西。下面的代码会导致这种情况发生:

<Window.Resources> 
    <myConverters:BananaToCarrotConverter x:Key="StupidestConverterEver" /> 
    <myConverters:BananaToAppleConverter x:Key="StupidestConverterEver" /> 
<Window.Resources> 
+1

是的,我同意。如果你能看到导致问题的关键是否会很好。我非常感谢你的帮助,但是它并没有带给我任何有用的东西:( – 2010-05-21 03:23:31

+0

你有这个库的来源吗?如果你有正确的文件,Line:1739 Position:47会让你的资源导致 – 2010-05-21 03:29:31

+0

其实它是ComponentOne Silverlight的SpellChecker组件,我刚刚把我的应用程序破解了 - 删除了我的App.xaml文件中的所有资源,但仍然失败,但是我有一个来自ComponentOne的示例应用程序,它工作正常。非常奇怪,但是,我会继续黑客直到我找到它! – 2010-05-21 03:34:49

-1

尝试运行应用程序时,您应该在.cs文件中看到错误。 对于这个带给定行号和列的.cs文件的相应.xaml文件是正确的。

0

检查你得到了什么ResourceDictionary引用 - 这个标志通常是其中一个有一个需要修复的错误。

如果你的异常是从应用程序中产生的,那么它可能是你的合并目录之一,否则就是有问题的控件。

此外,请检查您是否不缺少样式的资源目录使用情况(如果因为在XAML设计时会收到警告而获得了ReSharper,那么可以帮助它)。

enter image description here

0
  1. 将调试器与XamlParseException打破(调试 - >例外 - >通用语言运行时Exceptins - > System.Windows.Markup - > XamlParseException线 - >抛出列设置打勾)
  2. 看看调试器中的异常(尤其是在InnerExceptionLineNumber属性上)
  3. 尝试逐行浏览一个callstack。在选择一条线看当地人的窗口。它甚至可以在框架代码中显示一些变量,这可能会有所帮助。
  4. 尝试删除XAML的某些部分并查看是否有异常再次发生。这将帮助您找到导致问题的代码。