Visual Studio 2015高级编程(第6版)
上QQ阅读APP看书,第一时间看更新

7.3 XAML Intellisense

自XAML问世以来,就在编辑器窗口中支持Intellisense。从结构上看,XAML是格式良好的XML,因此,XAML文件具备的能力与Visual Studio在XML文件中支持模式的能力相同。因此,开发人员很容易手工输入XAML。不同的元素很容易获得,与每个元素相关联的属性也很容易获得。

在XAML Intellisense中,有问题的是数据绑定领域。XAML提供的数据绑定语法非常丰富,但Intellisense从未提供开发人员期待的提示。原因不难理解——数据绑定依赖的数据上下文是一个运行时的值。因为编辑的并不是运行时的值,所以很难确定在数据上下文中显示的属性。

在Visual Studio 2015中,Intellisense的数据绑定是可用的,但有一些要注意的地方。XAML文档的数据上下文必须在文档内部定义。如果在XAML文件的外部设置数据上下文,这是使用Model-View-ViewModel(MVVM)模式的常见方式,就需要在文档内部设置设计时期的数据上下文。这对XAML页面的运行时功能没有影响,且仍然允许Intellisense获得必要的信息。

另一个问题是Intellisense如何处理资源中的数据绑定,如数据模板。这些数据模板可以在外部资源字典中定义,所以Intellisense不可能确定活跃的数据上下文是什么。为了解决这个问题,可以直接为外部资源字典中的模板设置设计时期的数据上下文。或者,在XAML页面中定义了设计时期的数据上下文后,就可以使用Go to Definition命令(F12是调用该命令的默认键),Visual Studio会自动完成复制数据上下文的工作。

Intellisense用于XAML的匹配选项大多与编程语言一样。换句话说,它们支持基于Pascal casing (每个单词的首字母大写)或基于单词的子字符串(输入的字符匹配一个单词)的匹配。然而,XAML还包括模糊匹配的概念。如图7-16所示,即使输入的字符StakPa仅是接近正确的元素,也会选择StackPanel元素。

图7-16