WPFの開発用にコードスニペットを登録する
WPFのアプリ開発に役立ちそうなコードスニペットを作ってみました。
作ったのは、こんな感じのコードスニペットとか。
コードスニペットの作成方法は、↓の記事が参考になりました。
http://www.tk4.co.jp/develop/codesnippet/recipe.html
コードスニペットの内容をxmlで書いて、.snippetという拡張子で保存し、↓の場所に保存すればよいみたい(C#用の場合)
[Documentsのフォルダ]\Visual Studio 2013\Code Snippets\Visual C#\My Code Snippets
ルーティンングイベント用のコードスニペット
依存関係プロパティや添付プロパティ用のコードスニペットは標準で入っているのに、
ルーティングイベント用のコードスニペットはありません。
ってことで、まずはルーティングイベント用のコードスニペット。
↓のサイトを真似して作ってみました。
http://interactiveasp.net/blogs/natesstuff/archive/2008/10/15/routed-event-code-snippet.aspx
<CodeSnippet Format="1.0.0"> <Header> <Title>ルーティングイベントを定義します。</Title> <Shortcut>revent</Shortcut> <Description>ルーティングイベント用のコードスニペット</Description> <Author>minami_SC</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>eventhandlertype</ID> <ToolTip>イベントハンドラの型</ToolTip> <Default>RoutedEventHandler</Default> </Literal> <Literal> <ID>name</ID> <ToolTip>イベント名</ToolTip> <Default>MyEvent</Default> </Literal> <Literal> <ID>ownerclass</ID> <ToolTip>このイベントを所有しているクラスです。通常は、対応する宣言が存在するクラスです。</ToolTip> <Default>ownerclass</Default> </Literal> <Literal> <ID>routingstratigy</ID> <ToolTip>ルーティングイベントのルーティング方法</ToolTip> <Default>Bubble</Default> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[ public event RoutedEventHandler $name$ { add { AddHandler($name$Event, value); } remove { RemoveHandler($name$Event, value); } } public static readonly RoutedEvent $name$Event = EventManager.RegisterRoutedEvent( "$name$", RoutingStrategy.$routingstratigy$, typeof($eventhandlertype$), typeof($ownerclass$)); $end$]]> </Code> </Snippet> </CodeSnippet>
RelayCommand用のコードスニペット
以前↓の記事で書いた、RelayCommandですが、
これを使う時も結構な量のコードを書かないといけなくて面倒なので、コードスニペットにしてみました。
XAMLからViewModelのメソッドにバインドする~RelayCommand~ - SourceChord
引数なしのRelayCommandと、任意の型の引数を一つ受けるRelayCommand
<CodeSnippet Format="1.0.0"> <Header> <Title>RelayCommandを定義します。</Title> <Shortcut>rcmd</Shortcut> <Description>RelayCommand用のコードスニペット</Description> <Author>minami_SC</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>commandfield</ID> <ToolTip>コマンドのバッキング変数</ToolTip> <Default>myCommand</Default> </Literal> <Literal> <ID>commandname</ID> <ToolTip>コマンド名</ToolTip> <Default>MyCommand</Default> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[ private RelayCommand $commandfield$Command; public RelayCommand $commandname$Command { get { return $commandfield$Command = $commandfield$Command ?? new RelayCommand($commandname$); } } private void $commandname$() { } $end$]]> </Code> </Snippet> </CodeSnippet> <CodeSnippet Format="1.0.0"> <Header> <Title>RelayCommand<T>を定義します。</Title> <Shortcut>rcmdg</Shortcut> <Description>RelayCommand<T>用のコードスニペット</Description> <Author>minami_SC</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>type</ID> <ToolTip>引数の型</ToolTip> <Default>string</Default> </Literal> <Literal> <ID>commandfield</ID> <ToolTip>コマンドのバッキング変数</ToolTip> <Default>myCommand</Default> </Literal> <Literal> <ID>commandname</ID> <ToolTip>コマンド名</ToolTip> <Default>MyCommand</Default> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[ private RelayCommand<$type$> $commandfield$Command; public RelayCommand<$type$> $commandname$Command { get { return $commandfield$Command = $commandfield$Command ?? new RelayCommand<$type$>($commandname$); } } private void $commandname$($type$ parameter) { } $end$]]> </Code> </Snippet> </CodeSnippet>
BindableBaseと組み合わせたとき用のコードスニペット
以前↓で書いた、BindableBase派生クラス用のプロパティのスニペットです。
WPFでもBindableBaseを使ってINotifyPropertyChangedを実装する - SourceChord
<CodeSnippet Format="1.0.0"> <Header> <Title>BindableBase派生プロパティを定義します。</Title> <Shortcut>propbb</Shortcut> <Description>BindableBaseから派生したプロパティのコードスニペット</Description> <Author>minami_SC</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>type</ID> <ToolTip>プロパティ型</ToolTip> <Default>int</Default> </Literal> <Literal> <ID>fieldname</ID> <ToolTip>このプロパティのバッキング変数</ToolTip> <Default>myVar</Default> </Literal> <Literal> <ID>propertyname</ID> <ToolTip>プロパティ名</ToolTip> <Default>MyProperty</Default> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[ private $type$ $fieldname$; public $type$ $propertyname$ { get { return $fieldname$; } set { this.SetProperty(ref this.$fieldname$, value); } } $end$]]> </Code> </Snippet> </CodeSnippet>
まとめ
この辺をまとめて一つのファイルにしておきました。
ショートカットなどは以下の通り。
ショートカット | 内容 |
---|---|
revent | ルーティングイベントの作成 |
rcmd | RelayCommandの作成 |
rcmdg | RelayCommand |
propbb | BindableBase派生クラス用の、更新通知付プロパティの作成 |
WpfSnippets.snippet
<?xml version="1.0" encoding="utf-8" ?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>ルーティングイベントを定義します。</Title> <Shortcut>revent</Shortcut> <Description>ルーティングイベント用のコードスニペット</Description> <Author>minami_SC</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>eventhandlertype</ID> <ToolTip>イベントハンドラの型</ToolTip> <Default>RoutedEventHandler</Default> </Literal> <Literal> <ID>name</ID> <ToolTip>イベント名</ToolTip> <Default>MyEvent</Default> </Literal> <Literal> <ID>ownerclass</ID> <ToolTip>このイベントを所有しているクラスです。通常は、対応する宣言が存在するクラスです。</ToolTip> <Default>ownerclass</Default> </Literal> <Literal> <ID>routingstratigy</ID> <ToolTip>ルーティングイベントのルーティング方法</ToolTip> <Default>Bubble</Default> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[ public event RoutedEventHandler $name$ { add { AddHandler($name$Event, value); } remove { RemoveHandler($name$Event, value); } } public static readonly RoutedEvent $name$Event = EventManager.RegisterRoutedEvent( "$name$", RoutingStrategy.$routingstratigy$, typeof($eventhandlertype$), typeof($ownerclass$)); $end$]]> </Code> </Snippet> </CodeSnippet> <CodeSnippet Format="1.0.0"> <Header> <Title>RelayCommandを定義します。</Title> <Shortcut>rcmd</Shortcut> <Description>RelayCommand用のコードスニペット</Description> <Author>minami_SC</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>commandfield</ID> <ToolTip>コマンドのバッキング変数</ToolTip> <Default>myCommand</Default> </Literal> <Literal> <ID>commandname</ID> <ToolTip>コマンド名</ToolTip> <Default>MyCommand</Default> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[ private RelayCommand $commandfield$Command; public RelayCommand $commandname$Command { get { return $commandfield$Command = $commandfield$Command ?? new RelayCommand($commandname$); } } private void $commandname$() { } $end$]]> </Code> </Snippet> </CodeSnippet> <CodeSnippet Format="1.0.0"> <Header> <Title>RelayCommand<T>を定義します。</Title> <Shortcut>rcmdg</Shortcut> <Description>RelayCommand<T>用のコードスニペット</Description> <Author>minami_SC</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>type</ID> <ToolTip>引数の型</ToolTip> <Default>string</Default> </Literal> <Literal> <ID>commandfield</ID> <ToolTip>コマンドのバッキング変数</ToolTip> <Default>myCommand</Default> </Literal> <Literal> <ID>commandname</ID> <ToolTip>コマンド名</ToolTip> <Default>MyCommand</Default> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[ private RelayCommand<$type$> $commandfield$Command; public RelayCommand<$type$> $commandname$Command { get { return $commandfield$Command = $commandfield$Command ?? new RelayCommand<$type$>($commandname$); } } private void $commandname$($type$ parameter) { } $end$]]> </Code> </Snippet> </CodeSnippet> <CodeSnippet Format="1.0.0"> <Header> <Title>BindableBase派生プロパティを定義します。</Title> <Shortcut>propbb</Shortcut> <Description>BindableBaseから派生したプロパティのコードスニペット</Description> <Author>minami_SC</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>type</ID> <ToolTip>プロパティ型</ToolTip> <Default>int</Default> </Literal> <Literal> <ID>fieldname</ID> <ToolTip>このプロパティのバッキング変数</ToolTip> <Default>myVar</Default> </Literal> <Literal> <ID>propertyname</ID> <ToolTip>プロパティ名</ToolTip> <Default>MyProperty</Default> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[ private $type$ $fieldname$; public $type$ $propertyname$ { get { return $fieldname$; } set { this.SetProperty(ref this.$fieldname$, value); } } $end$]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>
このファイルを↓のフォルダに保存すれば使えるようになります。
[Documentsのフォルダ]\Visual Studio 2013\Code Snippets\Visual C#\My Code Snippets