借助ReSharper,只要您处理通用Windows平台(UWP)、WPF、Silverlight或Windows Phone应用程序,就可以获得编辑XAML文件的附加辅助。 这包括实时代码质量分析、重构、代码生成和重新排列,以及快速的解决方案级导航。
ReSharper 的代码质量分析功能可帮助您快速定位并更正 XAML 文件中的错误。 让我们通过几个示例来了解它的工作原理。
比如,您正在开发一个只允许XAML 2006的WPF项目。 如果ReSharper遇到来自XAML 2009的泛型对象,它会将对象高亮显示为语言错误。 如果您在高亮显示上按Alt+Enter,ReSharper将显示一个快速修复建议,转而声明从System.Collections.Generic.List<string>
继承的类型。
在您应用快速修复时,ReSharper:
List
的新包装器类型。 TypeArguments
特性,将对象的类型更改为新的包装器类型,并在必要时插入新的命名空间指令。 如果您正在使用尚未声明的资源,则ReSharper错误高亮显示不会让您忘记这一点。
当您按Alt+Enter时,ReSharper会建议几个可能的位置来创建缺失的资源。
如果尚未声明生成的资源的类型,没关系:ReSharper将为您提供根据用法创建CLR类型或XAML类型(即,UserControl
)的选项。 选择两个选项之一会创建一个具有默认实现的文件。
在元素中意外放置注释时,ReSharper将高亮显示该注释并提供解决错误的选项。
在样式setter上定义TargetType
的情况下,ReSharper会检测类型限定符中的冗余并提供修复。
您可以在XAML标记中使用ReSharper的代码补全。 对 CamelHumps 的支持将帮助您快速添加特性:只需输入几个符号并按 Ctrl+Space 即可显示 ReSharper 的符号补全提供的相关建议列表。
如果您通过按 Ctrl+Alt+Space 调用智能补全,ReSharper 将根据您在代码中的位置提供其他可感知上下文的选项。 例如,在事件处理程序声明中调用智能补全将生成处理程序方法。
通过在特性中使用智能补全,您可以快速创建新资源(静态或动态)、绑定或对静态元素的引用。
ReSharper代码补全的另一个振奋人心的优势是,它显示了在Background
或OpacityMask
等特性中预期的画笔颜色。
ReSharper 还支持 XAML 中的导入符号补全。 这意味着,您可以从在您的解决方案中引用,但在当前文件中没有相应的命名空间导入指令的程序集补全类型。
当然,一旦您以这种方式使用ReSharper代码补全,将自动插入所需的命名空间导入指令。
或者,如果您在某个XAML文件中有一个由于某种原因未导入的类型,ReSharper将为您提供快速创建命名空间指令的选项。
ReSharper 的 Navigate To 菜单处理 XAML 代码元素的方式与在 C# 代码文件中的处理方式相同。 在符号声明或用法上按Alt+`可以打开一个包含多个可能的导航目标的菜单。
通过 Go to File Member 在 XAML 文件中导航的方式与在 C# 文件中的方式相同,有助于导航到具有特定类型、名称或键的元素。 同样,您无需输入整个名称 - 对小写CamelHumps的支持让您只输入wl
即可查找WatchList
。
在 XAML 文件中按 Ctrl+Alt+F7 时,您将获得所有相关文件的列表:例如,代码隐藏文件、当前 XAML 文件中引用的任何资源或控件中使用的图像。
Go to Declaration(F12)和 Ctrl + 点击导航在 XAML 文件中的工作方式与在普通 C# 代码文件中的工作方式相同。 例如,在按住Ctrl的同时,您可以将鼠标悬停在特定类的名称上。 ReSharper将为类名添加下划线,点击该链接将直接转到类定义。
此外,就像代码文件一样,File Structure 窗口显示 XAML 文件的结构,使您可以快速导航到您正在查找的代码元素。
您可以通过按 Shift + F12 查找特定 XAML 元素的用法,此操作将调用 Find Usages 命令。 ReSharper将显示元素的所有使用位置。
您也可以按 Shift+Alt+F11,此操作将高亮显示用法,让您快速概括了解特定符号在当前文件中的使用位置。
创建依赖属性可能非常无聊。 这是 ReSharper 可以解决的另一个问题:它的代码模板引擎足够强大,可以让您创建细粒度的代码段,只需按几次键即可部署到依赖项属性中。 只需在编辑器中输入实时模板的名称 - 您可以获得一对属性和部署的相应依赖项属性,并且在您需要填写的所有占位符中提供智能代码补全。
类似地,您可以利用ReSharper部署附加属性,这些属性比常规依赖项属性更加繁琐。 部署实时模板后,您可以传递它的所有变量,并在适用的情况下使用ReSharper代码补全。
Although live templates for dependency property and attached property are not currently included in ReSharper out of the box, you can download and import them.
ReSharper 支持各种上下文操作,可简化 XML 语法的使用流程,并且可以在 XAML 中使用。 举几个例子,您可以使用其他名称替换标记名称,将特性转换为嵌套元素,或移除标记并将其子项提升一个级别。
还有十几个特定于XAML的上下文操作,允许您添加或者移除列或行定义,创建视图和资源,在不同类型的资源引用之间切换,将属性setter器提取到样式,等等。
由于XAML元素本质上等同于普通的类成员,因此适用于C#的一些重构也适用于XAML。 例如,您只需打开 Refactor This 菜单即可重命名或安全删除资源。
当您在XAML中对属性或方法的引用进行导航时,Refactor This菜单中显示的重构范围与您在C#或VB.NET代码中打开该菜单时的期望一致。
除了C#和VB.NET重构之外,还有一些特定于XAML的重构:
在XAML中,为多个控件定义内联样式,然后将它们重定位到样式定义是一种常见情况。 通过Extract Style重构,ReSharper使这项操作变得轻而易举。
为此重构显示的对话框可帮助您确定将属性提取到哪个资源(您可以选择现有资源或创建新资源),以及要提取哪些属性。
Extract Resource和Inline Resource重构允许您将几乎任何属性赋值(包括标记扩展中的属性赋值)移动到资源,反之亦然 - 从资源中获取定义并将其拼接到元素中。
本页面提供的所有键盘快捷键都在 ReSharper 的默认“Visual Studio”按键映射中。 有关 ReSharper 两种按键映射的详细信息,请参阅 ReSharper 文档。