在包含以下代码的Visual Studio社区MainPage.xaml.cs文件中:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Xaml.Media.Animation;
using System.Collections.ObjectModel;
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace App2
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
Random random = new Random();
///private NavigationHelper navigationHelper; ///not needed in Visual Studio 2017
private ObservableDictionary defaultViewModel = new ObservableDictionary();
public MainPage()
{
this.InitializeComponent();
}
private void startButton_Click(object sender, RoutedEventArgs e)
{
AddEnemy();
}
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);
}
private void AnimateEnemy(ContentControl enemy, double from, double to, string propertyToAnimate)
{
Storyboard storyboard = new Storyboard() { AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever };
DoubleAnimation animation = new DoubleAnimation()
{
From = from,
To = to,
Duration = new Duration(TimeSpan.FromSeconds(random.Next(4, 6)))
};
Storyboard.SetTarget(animation, enemy);
Storyboard.SetTargetProperty(animation, propertyToAnimate);
storyboard.Children.Add(animation);
storyboard.Begin();
}
}
}
......行
private ObservableDictionary defaultViewModel = new ObservableDictionary();
生成以下错误消息:
Error CS0246 The type or namespace name 'ObservableDictionary' could not
be found (are you missing a using directive or an assembly reference?)
我应该包含什么库才能使此错误消息消失?
答案 0 :(得分:0)
我知道这个问题太旧了,但是Head First C#使用了一个Common文件夹,其中包含此ReadMe:
Common目录包含可简化应用程序开发的类和XAML样式。
这些不仅方便,而且大多数Visual都需要 Studio项目和项目模板。如果您需要其中一种的变体 StandardStyles中的样式,建议您在 您自己的资源字典。右键单击样式控件时 在设计图面中,上下文菜单包括用于编辑 复制以简化此过程。
Common目录中的类构成项目的一部分,并且可能是 进一步增强以满足您的需求。何时应注意 更改现有方法和属性,因为更改不兼容 要求对包含在各种Visual中的代码进行相应的更改 Studio模板。例如,其他页面添加到您的项目 编写时假设其中的原始方法和属性 通用类仍然存在,并且类型名称具有 不变。
在VS2013解决方案的common文件夹中(也有一个VS2012,具有完全不同的类),这些是cs文件:
要使用这些类,您必须添加:
using Save_the_Humans.Common;
HFC#从未在书中引用或提及这些类别。我假设它们当时是样板代码。他们包装了一些接口和字典:
public class ObservableDictionary : IObservableMap<string, object>
{
private class ObservableDictionaryChangedEventArgs : IMapChangedEventArgs<string>
{
public ObservableDictionaryChangedEventArgs(CollectionChange change, string key)
{
this.CollectionChange = change;
this.Key = key;
}
public CollectionChange CollectionChange { get; private set; }
public string Key { get; private set; }
...
您也可以从带有them的VS2012版本或从我的repository的仅VS2013版本获得C#代码-不仅是公用文件夹-;从他们的存储库中,您无法打开或导入VS2017-至少我不能;我的是用VS2017制作的。
希望它可以帮助某人。