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
から継承する新しいラッパー型を定義する、.csファイルを作成します。 TypeArguments
属性を削除し、そのオブジェクトの型を新しいラッパー型に変更し、必要に応じて新しいnamespaceディレクティブを挿入します。 未宣言のリソースを使用している場合も、ReSharperはエラーをハイライト表示し、その事を忘れないようにします。
Alt+Enterを押すと、ReSharperは不足しているリソースを作成するための場所をいくつか候補に挙げます。
生成されたリソースの型が未宣言でも問題ありません。ReSharperは、使用箇所からCLR型かXAML型(UserControl
など)を作成するオプションをご提供します。 2つのオプションのうちいずれかを選択すると、デフォルトの実装でファイルが作成されます。
要素内に誤って配置されたコメントがあった場合、ReSharperはそれをハイライト表示し、エラーを解消するためのオプションを提供いたします。
Style setterでTargetType
が定義されている場合、ReSharperは冗長な型修飾子を検出して修正を提案します。
ReSharperのコード補完をXAMLタグで使用できます。 CamelHumpsに対応しているため、属性を素早く追加できます。シンボルをいつくか入力してCtrl+Spaceを押すだけで、ReSharperのシンボル補完が提示する関連候補のリストが表示されます。
Ctrl+Alt+Spaceを押してスマート補完を呼び出すと、ReSharperはコード内の場所に合わせて状況に応じたオプションを追加で提供します。 例えば、イベントハンドラの宣言部でスマート補完を呼び出すと、ハンドラメソッドの生成が提案されます。
属性内でスマート補完を使用すると、新しいリソース(静的または動的)、静的要素への バインドまたは参照をすばやく作成できます。
その他にも、ReSharperによるコード補完にはワクワクするメリットがございます。それは、Background
やOpacityMask
などの属性で要求されるブラシの色を表示できることです。
ReSharperはXAMLのインポートシンボル補完もサポートしています。 つまり、ソリューション内で参照されているにもかかわらず、対応する名前空間のimportディレクティブが現在のファイル内に存在しないアセンブリの型を補完できます。
もちろん、このようにReSharperのコード補完を一度使用すると、必要な名前空間のimportディレクティブが自動的に挿入されます。
あるいは、何らかの理由でXAMLファイルにインポートされていない型がある場合、ReSharperはオプションを提供し、そのnamespaceディレクティブを素早く作成できます。
ReSharperのNavigate Toメニューは、C#コードファイルの場合と同様にXAMLコード要素でも動作します。 シンボルの宣言部または使用箇所で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を押してFind Usagesコマンドを呼び出すと、特定のXAML要素が使用されている箇所を見つけることができます。 ReSharperはその要素が使用されている箇所すべてを表示します。
また、Shift+Alt+F11を押して使用箇所をハイライト表示し、現在のファイル内で特定のシンボルが使用されている箇所をすばやく俯瞰することもできます。
依存関係プロパティの作成は途方もなく退屈な場合があります。 このような問題もReSharperは解決できます。そのコードテンプレートエンジンは実に強力で、数回のキー入力できめ細やかなスニペットを作成し、それを依存関係プロパティに展開できます。 エディタでライブテンプレートの名前を入力するだけで、プロパティと対応する展開済み依存関係プロパティのペアを取得できます。また、入力が必要なすべてのプレースホルダーでインテリジェントなコード補完を利用できます。
同様に、ReSharperに、通常の依存関係プロパティよりもさらに扱いにくい添付プロパティを展開させることができます。 ライブテンプレートを展開後すぐに、そのおびただしい数の変数すべてを渡し、必要に 応じてReSharperのコード補完を使用できます。
現在、依存関係プロパティと添付プロパティ用のライブテンプレートは初期状態でReSharperに含まれていませんが、ダウンロードしてインポートすることはできます。
ReSharperはXMLの構文の処理を単純化し、XAMLで使用できるさまざまなコンテキストアクションをサポートしています。 例えば、タグ名を別の名前と置き換えたり、属性を入れ子要素に変換したり、タグを削除してその子を1階層上に移動したりできます。
また、XAML固有のコンテキストアクションを多数用意しており、行や列の定義の追加・削除、ビューやリソースの作成、さまざまな種類のリソース参照間の切り替え、プロパティsetterのスタイルへの抽出などを実行できます。
XAML要素は、本質的に通常のクラスメンバーと同等であるため、C#で動作する一部のリファクタリングはXAMLでも動作します。 例えば、Refactor Thisメニューを開くだけでリソースの名前を変更したり、リソースを安全に削除したりできます。
XAMLでプロパティやメソッドの参照箇所にキャレットを移動した際に Refactor Thisメニューに表示されるリファクタリングの範囲は C#やVB.NETのコードでメニューを開いた際に表示されるものと 一致しています。
C#やVB.NETのリファクタリングに加えて、次のようなXAML固有のリファクタリングもあります:
XAMLでは、複数のコントロールにインラインスタイルを定義してから、それらをスタイル定義に移動するのが一般的です。 ReSharperでは、Extract Styleリファクタリングを使って この操作を簡単に実行できます。
このリファクタリングで表示されるダイアログボックスでは、どの リソースにプロパティを抽出するか (既存のリソースを選択するか、新しいリソースを作成できます)、そしてどのプロパティを抽出するかを 決めることができます。
Extract ResourceおよびInline Resourceリファクタリングを使うと、 事実上 すべてのプロパティの割り当て(マークアップ拡張内のものを含む)をリソースに移動したり、 逆の操作を行ったりできます。 リソースから定義を取り出し、それを要素に結合できます。
ReSharperのコードの並べ替え機能を使用すると、XAMLファイル内の要素、あるいはこれらの要素内の属性でさえも自在に移動できます。 いずれの操作も、Ctrl+Alt+Shiftキーと矢印キーを押して実行できます。
属性を操作する際、これらのキーを組み合わせてタグ内の属性を移動し、左と右矢印キーを使って属性の位置を変更できます。 ただし、上と下キーを押した場合は、操作内容がタグ全体に影響します。
上と下キーは他のタグと連係してタグ全体を移動します。 Ctrl+Alt+Rightを使用して選択範囲を拡張してタグとその内容すべてを含める場合、同じ範囲に左キーと右キーを使用することもできます。ただし、これらのキーの組み合わせはまた現在の選択範囲を「降格」し、遭遇する任意のタグ内に限定するという点だけが異なります。
このページに記載されたキーボードショートカットはすべて、ReSharperデフォルトの「Visual Studio」キーマップのものです。 ReSharperの2種類のキーマップの詳細は、ReSharperのドキュメントをご覧ください。