XAML形式(ビジュアルツリー)のWPFで既存のコントロールのControlTemplateを取得するにはどうすればよいですか?これは、既存のテンプレートを使用して新しいControlTemplateを作成するのに役立ちます。
8 に答える
StyleSnooperをチェックしてください:
組み込みのコントロールの標準スタイル(したがってテンプレートも)をダンプします。WPFコントロールを含む特定のDLLをロードして、それらのデフォルトスタイルを表示することもできます。
スタイルとテンプレートの例は、MSDNでダウンロードできます。Default WPF Themes
リンクを参照してください。
BasedOn
ただし、属性を使用してすべてを再定義せずに既存のスタイルを拡張することもできます。
Expression Blendを使用している場合は、次のことができます。
- コントロールをデザイン画面にドラッグします
- コントロールを右クリックして、[テンプレートの編集]->[コピーの編集]を選択します
これを行うと、Blendはコントロールからベーステンプレートを抽出し、ドキュメント/アプリケーション内でリソースとして明示的に宣言します。このリソースは、好みに合わせて編集できます。これは、任意のコントロールに対して実行できます。
MatthewMacDonaldによる本「ProWPFinC#2008」には、第15章にコントロールテンプレートブラウザが含まれています。ApressのWebサイトからサンプルコードをダウンロードするだけでよいと思います。
2020年の更新:
WPFコンポーネントのすべてのスタイルとテンプレートがここに移動されました。
ただし、新しいコンポーネントを作成する前に、これをチェックして、それに代わる適切な方法があるかどうかを確認してください(スタイルを変更しても機能する可能性があります)。
注:通常、DynamicResourceバインディングが多数あり、それらを自分のものに置き換えて静的にすることができます。手作業をあまりやりたくない場合は、以下の2番目のソリューションの使用を検討してください。
2番目のより短い解決策は、Microsoft Blendを使用して、次の手順でテンプレート を抽出することです。
コントロールを右クリック
Edit Template
>>Edit Current
またはEdit a Copy
ただし、これは必ずしもテンプレート全体をエクスポートするわけではなく、テンプレート
の必要な部分をエクスポートするため、注意が必要です。
このテンプレートを公式のテンプレート(上記)と比較して、すべてが正常であることを確認することを検討してください。
ShowMeTheTemplateのようなツールを使用できます
Microsoft Blendを使用する:このツールのファイルにXAMLコード全体を貼り付け、視覚的なツリーを認識したいコントロールを右クリックします。
オプションを選択します:テンプレートを編集すると、そこに行きます
XamlWriterクラスは、この機能を提供します。がコントロールの名前である場合controlName
、以下のスニペットを使用して、オブジェクト内のコントロールのテンプレートのXamlを取得しstringBuilder
ます。回答に記載されているツールはこのクラスを利用していると思います。
var stringBuilder = new StringBuilder();
var xmlSettings = new XmlWriterSettings
{
Indent = true
};
using (var xmlWriter = XmlWriter.Create(stringBuilder, xmlSettings))
{
XamlWriter.Save(controlName.Template, xmlWriter);
}