ReSharper предоставляет дополнительную помощь при редактировании файлов XAML при работе над приложениями Universal Windows Platform (UWP), WPF, Silverlight или Windows Phone. Сюда относится анализ качества кода на лету, рефакторинги, генерация и реорганизация кода, а также быстрая навигация по всему решению.
Функции анализа качества кода ReSharper помогут вам быстро находить и исправлять ошибки в файлах XAML. Посмотрите, как это работает.
Представим, что вы работаете над WPF-проектом, в котором разрешено использование только XAML 2006. Если ReSharper сталкивается с обобщенным объектом из XAML 2009, такой объект подсвечивается как языковая ошибка. По нажатию Alt+Enter на подсвеченном объекте ReSharper предлагает выполнить быстрое исправление и объявить тип, унаследованный от System.Collections.Generic.List<string>
.
Когда вы применяете быстрое исправление, ReSharper:
List
. TypeArguments
, тип объекта изменяется на новый тип-обертку и, если необходимо, вставляется новая директива пространства имен. Если используется ресурс, который еще не объявлен, подсветка ошибок ReSharper не позволит забыть об этом.
По нажатию Alt+Enter ReSharper предлагает несколько вариантов мест для создания недостающего ресурса.
Если тип сгенерированного ресурса еще не объявлен, это не проблема: ReSharper предложит создать из использования либо тип CLR, либо тип XAML (т. е. UserControl
). При выборе одного из двух вариантов создается файл с реализацией по умолчанию.
Если комментарий случайно оказался внутри элемента, ReSharper подсветит его и предложит варианты решения проблемы.
В случае, если для сеттера стиля определен TargetType
, ReSharper обнаруживает избыточные квалификаторы типов и предлагает исправление.
Автодополнение кода в ReSharper работает для тегов XAML. Поддержка сокращений CamelHumps позволяет быстро добавлять атрибуты: достаточно ввести несколько символов и нажать Ctrl+Space, чтобы открылся список вариантов автодополнения символов.
При вызове Smart Completion нажатием Ctrl+Alt+Space ReSharper предлагает дополнительные контекстные варианты в зависимости от места в коде, где было нажато сочетание клавиш. Например, при вызове Smart Completion в объявлении обработчика события предлагается сгенерировать метод-обработчик.
Вызов Smart Completion в атрибуте позволяет быстро создать новый ресурс (статический или динамический), связывание или ссылку на статический элемент.
Еще одно замечательное свойство автодополнения ReSharper — отображение цветов кистей, ожидаемых в таких атрибутах, как Background
или OpacityMask
.
ReSharper также поддерживает автодополнение для неимпортированных типов в XAML. Это значит, что автодополнение типов действует для сборок, на которые есть ссылки в решении, но в текущем файле нет соответствующих директив импорта пространства имен.
Разумеется, в таких случаях автодополнение ReSharper вставляет требуемую директиву импорта пространства имен автоматически.
Если же в файле XAML есть тип, который по каким-либо причинам не был импортирован, ReSharper предложит быстро создать директиву пространства имен.
Меню ReSharper Navigate To работает для элементов кода XAML так же, как и для файлов кода на C#. Сочетание клавиш Alt+` на объявлении или использовании символа открывает меню с вариантами целей навигации.
Навигация по команде Go To File Member работает для файлов XAML так же, как и для C#-файлов и помогает переходить к элементам с определенным типом, именем или ключом. Опять же вводить полное имя не придется — благодаря поддержке CamelHumps в нижнем регистре, для поиска WatchList
достаточно ввести wl
.
По нажатию Ctrl+Alt+F7 в файле XAML выдается список всех связанных файлов, например: файла с выделенным кодом, любых ресурсов, на которые ссылается текущий файл XAML, или изображений, используемых в элементах интерфейса.
Навигация Go to Declaration (F12) и Ctrl + щелчок мышью тоже одинаково работает в файлах XAML и в обычных файлах кода C#. Например, можно при удерживаемой клавшие Ctrl навести курсор мыши на имя определенного класса. ReSharper подчеркнет имя класса, а по нажатию на ссылку переведет прямо к определению класса.
Кроме того, в окне File Structure вы можете просмотреть структуру XAML-файла и быстро перейти к элементу кода, который вы ищете.
Использования определенного элемента XAML можно найти по сочетанию клавиш Shift+F12, которое вызывает команду Find Usages. ReSharper отображает все места, где используюется данный элемент.
Также можно нажать сочетание клавиш Shift+Alt+F11, которое подсвечивает использования и позволяет быстро ознакомиться со всеми местами в текущем файле, где используется определенный символ.
Создание свойств зависимостей может оказаться донельзя нудным делом. Здесь ReSharper тоже может помочь: его движок шаблонов кода способен создавать детализированные сниппеты, которые за пару нажатий клавиш можно развернуть в свойства зависимостей. Если просто ввести в редакторе имя шаблона кода, развертывается пара «свойство – соответствующее свойство зависимости», причем везде, где требуется заполнение полей, работает умное автодополнение кода.
Аналогичным образом, ReSharper умеет развертывать прикрепленные свойства, которые отличаются еще большей громоздкостью по сравнению с обычными свойствами зависимостей. После развертывания шаблона можно пройти по всем его многочисленным переменным, используя автодополнение кода ReSharper везде, где это возможно.
Хотя шаблоны Live Templates для свойств зависимостей и прикрепленных свойств пока не работают в ReSharper «из коробки», из можно скачать и импортировать.
ReSharper поддерживает различные контекстные действия, которые упрощают работу с синтаксисом XML и могут использоваться в XAML-файлах. Например, вы можете заменить имя тега другим именем, преобразовать атрибут во вложенный элемент, удалить тег и поднять его дочерние элементы на уровень выше.
Существует также более десятка контекстных действий, специально созданных для XAML, которые позволяют добавлять или убирать определения столбцов или строк, создавать представления и ресурсы, переключаться между различными типами ссылок на ресурсы, извлекать сеттеры свойств в стили и т. д.
Поскольку элементы XAML, по сути, эквивалентны обычным членам класса, некоторые рефакторинги, работающие в коде на C#, применимы и к XAML. Вы можете переименовать или безопасно удалить ресурс, просто открыв меню Refactor This.
При навигации по ссылке к свойству или методу в XAML список рефакторингов, предлагаемых в меню Refactor This, не уступает аналогичному списку для кода C# или VB.NET.
Помимо рефакторингов для C# и VB.NET в ReSharper предусмотрено несколько специальных XAML-рефакторингов:
При работе с XAML часто для нескольких элементов интерфейса объявляют встроенные стили, а затем перемещают их в определение стиля. Благодаря рефакторингу ReSharper Extract Style эта операция проходит гораздо легче.
В диалоговом окне, которое открывается для этого рефакторинга, можно решить, в какой ресурс требуется извлечь свойства (можно выбрать существующий ресурс или создать новый), а также какие именно свойства требуется извлечь.
Рефакторинги Extract Resource и Inline Resource позволяют переместить практически любое присвоение свойства (включая расширения разметки) в ресурс и наоборот — определение изымается из ресурса и вставляется в сам элемент.
Используя функции реорганизации кода, вы можете изменять порядок элементов в XAML-файле, а также атрибутов внутри элемента. Обе операции выполняются нажатием Ctrl+Alt+Shift и клавиш со стрелками.
При работе с атрибутами эти сочетания клавиш позволяют менять порядок атрибутов внутри тега — клавиши со стрелками перемещают атрибут вправо или влево. Однако если вы нажмете клавиши Вверх или Вниз, действие затронет весь тег.
С помощью этих клавиш можно изменить положение целого тега по отношению к другим тегам. Если расширить выделенную область сочетанием клавиш Ctrl+Alt+вправо, чтобы в нее вошел тег вместе со всем своим содержимым, можно продолжать нажимать клавиши влево и вправо, при этом «понижается ранг» текущей выделенной области, т. е. она оказывается внутри всех встреченных тегов.
Все сочетания клавиш, приведенные на этой странице, соответствуют набору сочетаний «Visual Studio», использующемуся в ReSharper по умолчанию. Подробнее о двух наборах сочетаний клавиш, доступных в ReSharper, вы можете узнать в его документации.