UserControlの継承めも

自前のUserControlを継承して、
派生のUserControlを作りたい時に。
基底クラスのコードをoverrideして独自処理にしたりとか。

基本的なやり方は、
http://d.hatena.ne.jp/kent013/20091129/1259482727
http://d.hatena.ne.jp/okazuki/20091025/1256472760
http://csfun.blog49.fc2.com/blog-entry-42.html
この辺りのページが参考になる。

基本的には、新しくUserControlを追加して、
XAML側のルート要素を

<local:MyUserControl
    x:Class="ProjectName.FolderName.ClassName"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:MyNameSpace"
    mc:Ignorable="d"
    >
</local:MyUserControl>

みたいな感じで、local:MyUserControlに変更。
その上で、xaml.csファイルのクラス定義で、基底クラスを
自分で作ったUserControlのクラスに置き換える。

ただしこのままコンパイルしても怒られる*1
なので、xamlファイルのプロパティにある、
「ビルドアクション」を"Page"から"Resource"に変更する。
これでg.csファイルが自動生成されなくなる様子。
自分の環境の場合、これでコンパイルが通った。
今のところ弊害は出ていない模様。

http://csfun.blog49.fc2.com/blog-entry-42.html
にあるような、InitializeComponent()の修正はしていない。*2

(このあと問題が起きなければ)これでUserControlの派生、量産が大分やりや
すくなる。
これとWPFのTemplate機能を組み合わせれば、更に柔軟性・拡張性が上がる気が
する*3
http://www.atmarkit.co.jp/fdotnet/vblab/uiframework_04/uiframework_04_02.html
Templateの中にイベントハンドラを埋め込む方法については、
http://pro.art55.jp/?eid=1046821
この辺が参考になりそう。後で試してみる。上手く行ったら後で纏める。

*1:自動生成のpartialクラス(g.csファイル)の方で齟齬が発生するらしい。

*2:こちらの環境が VS2010で、元記事から大分時間が立っているから?

*3:生コントロールにUIを付け加える場合とか