2013-03-21 115 views
1

我试图开发一些自定义控件(我实际上使用模板控件来做到这一点,如果这件事)的Windows应用程序商店应用程序。我得到一个相当模糊的错误(如标题所示)。唯一的附加信息是这样的:神秘的Windows.UI.Xaml.Markup.XamlParseException

WinRT information: Cannot create instance of type 'SoundControls.tcNote' [Line: 13 Position: 51] 

我不知道,如果这个问题是在控制的布局定义的Generic.xaml文件(如我想的错误似乎指向)或文件后面的代码。

无论哪种方式,这里是两行13:

Generic.xaml

BorderBrush="{TemplateBinding BorderBrush}" 

代码隐藏

using Windows.UI.Xaml.Controls.Primitives; 

似乎都毫无意义和无害的。有没有人有什么想法更接近解决这个错误?我愿意发布代码片段等(如相关/请求),但我总是讨厌查看一个问题,只看到代码页。

编辑:根据要求

构造:

this.DefaultStyleKey = typeof(tcNote); 

(GetTemplateChild("PART_note") as Thumb).DragStarted += tcNote_DragStarted; 
(GetTemplateChild("PART_note") as Thumb).DragDelta += tcNote_DragDelta; 
(GetTemplateChild("PART_note") as Thumb).DragCompleted += tcNote_DragCompleted; 

其次编辑/解决方案:

我想通了,13号线问题是MainPage.xaml中。

<SoundControls:tcNote HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" /> 

那行看起来像它上面有一个错误(蓝色的下划线,但它仍然让我建立),如果我在它悬停它说:“授人以实例方法不能为空‘这个’。 “这个问题似乎是* PART_note *尚未提供。我需要将构造函数中的这些行移动到OnApplyTemplate方法中。

+0

什么代码是在13号线,位置51? 'SoundControls.tcNote'的构造函数是什么样的? – 2013-03-22 02:46:35

+0

我编辑了问题 – BlargleMonster 2013-03-22 03:20:48

+0

请不要编辑问题以添加答案。这不是别人可以为它投票或寻找它的地方。 – 2013-03-26 05:22:53

回答

0

您是否可能在第13行的某个其他XAML文件中实例化了SoundControls.tcNote?错误可能源于此处。

问题可能是两种:

  • 在控件的构造函数:你确定GetTemplateChild("PART_note") as Thumb不为空?如果你注释掉这些行,它有帮助吗?
  • 或其XAML中的某处:解析错误,因为无法解析某些其他错误的referencesor。

我会开始通过最小化控件中代码/ XAML的数量来解决问题,并查看问题是否消失。

+0

我在构造函数中评论了那些,并让它运行。正如我现在的问题所指出的,我需要将这些移到OnApplyTemplate方法。 – BlargleMonster 2013-03-26 04:25:25

1

当我遇到这个错误我做两件事情:

  1. 检查的InnerException(重复此步骤,直到它)来获取正在发生的事情的一个更好的主意。修理它。

  2. 如果没有InnerException(或者它太模糊),我会将所有XAML注释掉,并开始慢慢地将其返回。这有助于查明有问题的XAML或代码。

+0

不幸的是,我没有内部例外检查。 – BlargleMonster 2013-03-26 04:08:58

+0

如果没有InnerException,它可能不是XAML。 XAML解析器几乎总是给出内隐感知。是的,你是正确的。它只是在'OnApplyTemplate'之前,控制和它的内部控制建立起来。因此,将GetTemplateChild代码移动到该方法是正确的。 – 2013-03-26 05:22:24

0

我意识到这是一个老问题。我只是偶然发现了这个错误,在我的情况中,这是因为在一种语言资源中,我设置了文本框的文本,该文本也绑定到视图模型中的属性。当然,在例外情况中没有关于这方面的线索,内部例外已关闭,并且仅在模拟器上显示,因为本地计算机正在使用其他文化。这使得难以追踪。也许这会帮助一些不幸的灵魂。