Visual Studio 2010 XAML Editor неудобно IntelliSense?

В текстовом редакторе Visual Studio С#, когда вы хотите получить свойство, просто введите prop, а затем нажмите вкладку TWICE, чтобы получить "фрагмент" /шаблон для свойства. Выделяются как Тип, так и имя свойства. Вы нажимаете вкладку, когда хотите переключиться между типом и свойством, затем нажмите "Enter", когда вы закончите, и ваш курсор переместится в конце свойства.

В редакторе WPF XAML нажатие "Enter" создаст разрыв строки. Например, если вы наберете следующее:

<TextBox x:

и когда вы выберете свойство "Имя" из IntelliSense, оно даст вам следующее:

<TextBox x:Name="_"

_ представляет ваше текущее местоположение курсора.

Дайте Name значение, например текстовое поле, затем нажмите Enter. В этот момент я ожидаю, что мой курсор будет прыгать в конце так:

<TextBox x:Name="textbox"_ 

но вместо этого он создает разрыв строки следующим образом:

 <TextBox x:Name="textbox
          _"

Такое поведение меня раздражает. Вместо нажатия Enter вместо этого я нажимаю клавишу End.

Как получить мое намеренное поведение?

PS: Я новичок в WPF и XAML.

Ответы

Ответ 1

Это всегда раздражало меня. Один из вариантов - создать простой макрос.

  • Введите свой тег XAML и назовите его. (В этот момент ваш курсор находится внутри кавычек атрибута.)
  • Нажмите Ctrl-Shift-R, чтобы начать макросъемку.
  • Нажмите End, а затем Enter. (Теперь ваш курсор находится там, где вы хотите.)
  • Нажмите Ctrl-Shift-R еще раз, чтобы остановить запись макроса.

Если вы выполните описанные выше шаги, Visual Studio создаст следующий макрокоманд, который вы можете увидеть, если вы нажмете Alt-F8 и откройте RecordingModule.TemporaryMacro:

DTE.ActiveDocument.Selection.EndOfLine()
DTE.ActiveDocument.Selection.NewLine()

Теперь вы можете запустить этот макрос с помощью Ctrl-Shift-P, но в данный момент это только временный макрос. Вы должны сохранить его и назначить ему с помощью сочетания клавиш.

  • Откройте Macro Explorer (Alt-F8).
  • Найти временный макрос под MyMacros | RecordingModule и переименуйте его. Возможно, даже вывести его из RecordingModule в другой модуль тоже.
  • Откройте меню "Сервис" и выберите "Параметры", "Среда", "Клавиатура".
  • Введите имя вашего макроса в разделе "Показать команды, содержащие".
  • Выберите свой макрос и назначьте его клавишами быстрого доступа. (Я выбрал Ctrl-Enter.)

Итак, вместо того, чтобы переместить вашу руку, нажмите End, а затем Enter, вы можете просто нажать Ctrl-Enter.

Я также записал еще один макрос, который перемещается в конец строки и набирает для меня "/" > ", и прикрепляет его к Ctrl-/. Генерируемый код VS выглядит следующим образом:

DTE.ActiveDocument.Selection.EndOfLine()
DTE.ActiveDocument.Selection.Text = " />"
DTE.ActiveDocument.Selection.NewLine()

Альтернативой всем этим макросам является отключить автоматические кавычки. Откройте меню "Сервис" и перейдите в "Параметры", "Текстовый редактор", "XAML", "Разное". Снимите флажок для автоматической вставки атрибутов. Тогда он не добавит к вам конечную цитату, и вам не придется использовать ключ arrow keys или End (хотя вам, конечно, придется вводить окончательную цитату).

Ответ 2

Другим более простым решением является повторная привязка клавиши быстрого доступа к операции Edit.WordNext.

По умолчанию для этого параметра установлено значение Ctrl + RightArrow. В визуальной студии перейдите в меню TOOLS- > Options- > Environment- > Keyboard.

Мне нравится привязывать это к Shift + Space, поэтому мне не нужно использовать клавиши со стрелками. Когда вы закончите вводить атрибут xaml, а курсор находится в левой части метки кавычки, нажмите Shift + Space, и он переместится в правую сторону знака, чтобы вы могли продолжить набирать остальные атрибуты,

Намного проще, чем использовать макрос.