Visual Studio 2010 XAML编辑器的智能感知功能不太好用?

14

在Visual Studio的C#文本编辑器中,当您想要一个属性时,只需键入prop,然后按两次Tab键即可获取属性的“片段”/模板。类型和属性名称都会被突出显示。当您想在类型和属性之间切换时,请按Tab键,完成后按Enter键,您的光标将跳到属性末尾。

在WPF XAML编辑器中,按“Enter”键会创建一个换行符。例如,如果您键入以下内容:

<TextBox x:

当你从 IntelliSense 中选择 "Name" 属性时,它会给你以下内容:

<TextBox x:Name="_"

_ 代表当前光标位置。

给“名称”赋一个值,比如说“textbox”,然后按下 Enter 键。此时,我期望我的光标会像这样跳到结尾处:

<TextBox x:Name="textbox"_ 

但它实际上会创建一个像这样的换行:

 <TextBox x:Name="textbox
          _"

这种行为很让我烦恼。我本想按 Enter 键,但误按了 End 键。

我该如何获得我想要的行为?

PS:我对WPF和XAML不熟悉。


1
你在C#中描述的行为适用于代码片段,但不适用于标准Intellisense。我一直认为在XAML标记中应该使用箭头键。我很想知道是否有更好的方法。 - Cody Gray
1
我希望他们早点修好这该死的东西。 - Rei Miyasaka
同意。这是一个很大的痛点。 - Marty
2个回答

8
另一个更简单的解决方案是重新绑定操作 Edit.WordNext 的快捷键。默认情况下,该键设置为 Ctrl+RightArrow。在 Visual Studio 中,转到“工具”->“选项”->“环境”->“键盘”。我喜欢将其绑定到 Shift+Space,这样就不必使用箭头键了。当您完成输入 xaml 属性并且光标位于末尾引号的左侧时,请按 Shift+Space,它会跳转到右侧以便您可以继续输入其余属性。比使用宏容易多了。

由于Visual Studio 2013不支持宏,所以这对我来说非常有效。 - KevenDenen

7
我也一直感到很烦恼。其中一个选项是创建一个简单的宏。
  1. 键入您的XAML标记并命名。(此时您的光标在属性的引号之内。)
  2. 按下 Ctrl-Shift-R 开始录制宏。
  3. 按下 End,然后按下 Enter。(现在您的光标在您想要它的位置。)
  4. 再次按下 Ctrl-Shift-R 停止录制宏。
如果您按照上述步骤,Visual Studio 将会生成以下宏代码,您可以按下 Alt-F8 并打开 RecordingModule.TemporaryMacro 查看。
DTE.ActiveDocument.Selection.EndOfLine()
DTE.ActiveDocument.Selection.NewLine()

你现在可以使用 Ctrl-Shift-P 运行这个宏,但目前它只是一个临时宏。你应该保存它并将其分配给一个键盘快捷键。
  1. 打开宏资源管理器 (Alt-F8)。
  2. 在 MyMacros | RecordingModule 下找到 TemporaryMacro,并重命名它。甚至可以将其移动到另一个模块中。
  3. 打开“工具”菜单,转到“选项”,“环境”,“键盘”。
  4. 在“显示包含命令的命令”下输入宏名称。
  5. 选择您的宏并分配快捷键。(我选择了 Ctrl-Enter。)
所以现在,您不需要移动手去按 End 然后按 Enter,只需按下 Ctrl-Enter 即可。
我还记录了另一个宏,它会将光标移动到行末并为我键入“ />”,并将其附加到 Ctrl-/。VS 生成的代码如下:
DTE.ActiveDocument.Selection.EndOfLine()
DTE.ActiveDocument.Selection.Text = " />"
DTE.ActiveDocument.Selection.NewLine()

除了所有这些宏之外,还有一种方法是关闭自动引号。打开“工具”菜单,转到“选项”,“文本编辑器”,“XAML”,“杂项”。取消勾选自动插入属性引号的选项。然后它就不会为您添加结束引号,您也不必使用箭头键End键(当然,现在您需要输入结束引号)。


1
我已经编辑了我的答案,包括Visual Studio生成的宏代码。 - Andrew
未来的答案寻求者请注意,2010年之后的Visual Studio版本已经不再支持宏。 - KevenDenen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接