プロパティの記載が一々同じことを書かないとで面倒だなーという部分を「コードスニペット」としてまとめると便利です。
通常の「prop」だと「public int MyProperty { get; set; }」だけで、これはこれで楽なのですが、制御部分もという場合は物足りません。
MSエヴァンジェリストの高橋忍氏作成された【Dependency Property for Windows Phone コードスニペット】これをベースに改造をして「添付プロパティ」としてコードを展開するようにしました。
ファイルはテキストとして「DependencyPropertyWP.snippet」で保存しますが、文字コードをutf-8で保存しましょう。
マイ ドキュメントの「Visual Studio 2012\Code Snippets\Visual C#\My Code Snippets」に保存してください。
VS内でpropwp2[tab]で使用できます。
Windowsストアアプリで使用する場合は「[System.ComponentModel.Description(“説明文”), System.ComponentModel.CategoryAttribute(“タブ”)]」はコメントアウトすればOKです。
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2008/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Dependency Property for Windows Phone</Title>
<Shortcut>propwp2</Shortcut>
<Description>Dependency Property for Windows Phone コード スニペット</Description>
<Author>shinobu takahashi / CryEarth tomoyuki sasaki</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>プロパティの型</ToolTip>
<Default>int</Default>
</Literal>
<Literal>
<ID>name</ID>
<ToolTip>プロパティ名</ToolTip>
<Default>MyPropName</Default>
</Literal>
<Literal>
<ID>ownerclass</ID>
<ToolTip>このプロパティを定義しているここのクラスです</ToolTip>
<Default>ownerclass</Default>
</Literal>
</Declarations>
<Code Language="CSharp">
<![CDATA[[System.ComponentModel.Description("説明文"), System.ComponentModel.CategoryAttribute("タブ")]
public $type$ $name$
{
get { return ($type$)GetValue($name$Property); }
set { SetValue($name$Property, value); }
}
public static readonly DependencyProperty $name$Property =
DependencyProperty.Register(
"$name$",
typeof($type$),
typeof($ownerclass$),
new PropertyMetadata( // メタデータ
"", // デフォルト値
new PropertyChangedCallback(On$name$Changed)) );
private static void On$name$Changed(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
$ownerclass$ userControl = obj as $ownerclass$;
if (userControl != null)
{
$type$ newValue = ($type$)e.NewValue;
}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>