【问题标题】:Mysterious Windows.UI.Xaml.Markup.XamlParseException神秘的 Windows.UI.Xaml.Markup.XamlParseException
【发布时间】:2013-03-11 16:38:59
【问题描述】:

我正在尝试为 Windows 应用商店应用程序开发一些自定义控件(我实际上是在使用 Templated Control 来执行此操作)。我遇到了一个相当模糊的错误(如标题所示)。唯一的附加信息是:

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;

两者似乎都毫无意义和无害。有没有人知道如何更仔细地解决这个错误?我愿意发布代码 sn-ps 等(如相关/请求),但我总是讨厌看到一个问题,只看到几页代码。

编辑:

按要求构造函数:

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" />

该行看起来有错误(蓝色下划线,但它仍然让我构建),如果我将鼠标悬停在它上面,它会显示“委托给实例方法不能有 null 'this'”。问题似乎是 *PART_note* 尚不可用。我需要将构造函数中的这些行移到 OnApplyTemplate 方法中。

【问题讨论】:

  • 第 13 行第 51 位的代码是什么? 'SoundControls.tcNote' 的构造函数是什么样的?
  • 我编辑了问题
  • 请不要编辑问题来添加答案。这不是其他人可以投票或将寻找它的地方。

标签: windows-8 visual-studio-2012 windows-runtime


【解决方案1】:

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

问题可能是:

  • 在您的控件的构造函数中:您确定GetTemplateChild("PART_note") as Thumb 不为空吗?注释掉这些行会有帮助吗?
  • 或其 XAML 中的某处:由于无法解析的 StaticResource 引用或某些其他错误导致解析错误。

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

【讨论】:

  • 我在构造函数中将它们注释掉并让它运行。正如我的问题中所述,现在我需要将它们移至 OnApplyTemplate 方法。
【解决方案2】:

当我遇到这个错误时,我会做两件事:

  1. 检查 InnerException(重复此步骤直到它为 null)以更好地了解正在发生的事情。修复它。

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

【讨论】:

  • 很遗憾,没有内部异常可供我检查。
  • 如果没有 InnerException,它可能不是 XAML。 XAML 解析器几乎总是给出内部异常。是的,你是对的 只有在OnApplyTemplate 之前,控件及其内部控件才建立起来。因此,将 GetTemplateChild 代码移至该方法是正确的。
【解决方案3】:

我意识到这是一个老问题。我只是偶然发现了这个错误,就我而言,这是因为在一种语言资源中,我正在设置一个文本框的文本,该文本框也绑定到视图模型中的一个属性。当然,异常中并没有这方面的线索,内部异常被关闭了,它只显示在模拟器上,因为本地机器正在使用另一种文化。这使得追踪变得困难。也许这会帮助一些不幸的人。

【讨论】: