ダイレクトコンテントをサポートするCustomControlの実装
About
GridやCanvasのように、ドラッグアンドドロップでその子要素にコントロールを配置することができるカスタムコントロール、を作るにはどうすれば良いのかをここでは解説します。ふつうは、ContentTemplateなどで頻繁にあつかうContentPresenterを利用します。しかしながらほんの些細なことながら、1点のみ注意しておく必要があるのです。
HowTo
ふつう、新規にカスタムコントロールを追加しようとすると、追加されるクラスはContentクラスを継承しています。この状態のまま、対象のクラスのXAMLを編集し、ContentPresenterを定義してもエラーが発生します。これはContentがContentPresentorを許容しないクラスであるために発生しています。詳細については割愛しますが、この問題は継承するクラスをContentControlに変更することで解決できます。
問題の解決は酷く簡単ですが、あまり情報が公開されていない、公式の情報しか存在しない、という状況下では、このことに気が付かないことがあるのです(私のように)。