我是一个C#语言的初学者,希望通过这个博客和大家交流学习时发现的问题和学习经验。与此同时还可以作为一个督促自己坚持的办法。希望这个栏目不要断更。同时我使用的教程是“Head First C#”。
废话不多说,让我决定开始写这篇博客的主要原因是,我在做本书的第一个例程时发现,当程序运行到
private void AddEnemy()
{
ContentControl enemy = new ContentControl();
enemy.Template = Resources["EnemyTemplate"] as ControlTemplate;
AnimateEnemy(enemy, 0, playArea.ActualWidth - 100, "(Canvas.Left)");
AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 100),
random.Next((int)playArea.ActualHeight - 100), "(Canvas.Top)");
playArea.Children.Add(enemy);
}
这段代码时,会出现一个致命的错误,错误信息如下
在运行时,点击start按钮后出现中断,错误信息如下:
“System.Runtime.InteropServices.COMException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
WinRT 信息: Cannot find a resource with the given key.
经过我调试后发现,程序会在
enemy.Template = Resources["EnemyTemplate"] as ControlTemplate;
这段代码运行后,出现强制中断的情况。然而语句本身看不到任何问题。
于是我检查了ControlTemplate 这个类的说明,了解了使用方法之后,在MainPag.xaml中找到了这个模板的定义。我发现在定义中
<ContentControl Content="ContentControl" HorizontalAlignment="Center" VerticalAlignment="Center" Template="{StaticResource EnemyTemplat}"/>
最后的Template 的标记(姑且让我这么叫他)。是EnemyTemplat而不是书上的代码设计中的EnemyTemplate注意最后一个e。然而这段代码好像是自动生成的,也许是我不记得了
这里先留个疑问。那么问题就好解决了。只需将AddEnemy()中的EnemyTemplate的e去掉就可以了。
这里还有一些不是很明白的地方,就是我打算直接更改xaml中的template的定义的时候却会报错。
第一篇学习笔记,第一次用CSDN有很多不足的地方希望大家指正。