コードビハインドでテンプレートを作成することはお勧めできません。理論的には、を定義することでこれを行うことができControlTemplate.VisualTree
ますFrameworkElementFactory
。
ControlTemplate template = new ControlTemplate(typeof(Button));
var image = new FrameworkElementFactory(typeof(Image));
template.VisualTree = image;
プロパティの割り当ては、とを使用する必要があるため、非常に回りくどいSetValue
ですSetBinding
。
image.SetValue(Image.SourceProperty, ...);
また、(以前に)受け入れられた回答と引用されたものについて:
ControlTemplateをプログラムで設定することは、XamlReaderクラスを使用する必要があるため、XAMLを使用するのと同じです。
そのステートメントはちょうど間違っています、私たちは「しなければならない」わけではありません。
実行時にテンプレートを割り当てる場合は、必要に応じてロードできるリソースとしてテンプレートを定義します。
編集:ドキュメントによるFrameworkElementFactory
と非推奨です:
このクラスは、ControlTemplateやDataTemplateなどのFrameworkTemplateのサブクラスであるテンプレートをプログラムで作成するための非推奨の方法です。このクラスを使用してテンプレートを作成する場合、すべてのテンプレート機能を使用できるわけではありません。プログラムでテンプレートを作成するための推奨される方法は、XamlReaderクラスのLoadメソッドを使用して文字列またはメモリストリームからXAMLをロードすることです。
この推薦はそんなに良い考えではないかと思います。個人的には、文字列とを使用してテンプレートを定義することを回避できる場合は、テンプレートをXAMLのリソースとして定義しますXamlReader
。