Plantilla de control para controles existentes en WPF

¿Cómo obtener el control del control existente en WPF en formato XAML (árbol visual)? Esto es para ayudar a crear una nueva plantilla de control con la ayuda de la plantilla existente.

Los estilos junto con los ejemplos de plantilla están en MSDN para descargar, consulte el enlace Default WPF Themes .

Sin embargo, también puede ampliar el estilo existente sin redefinir todo utilizando el atributo BasedOn .

Echa un vistazo a StyleSnooper :

http://www.blogs.intuidev.com/image.axd?picture=2010/5/StyleSnooper_TN.png

Va a descargar los estilos estándar (y por lo tanto las plantillas también) para los controles integrados. También puede cargar una DLL específica que contenga controles WPF y ver los estilos predeterminados para esos también.

Si tiene Expression Blend puede:

  1. Arrastre el control sobre la superficie de diseño
  2. Haga clic con el botón derecho en el control y elija Editar plantilla -> Editar copia

Cuando hagas esto, Blend extraerá la plantilla base del control y la declarará explícitamente en el documento / aplicación como un recurso que luego podrás editar a tu gusto. Puedes hacer esto para cualquier control.

El libro “Pro WPF en C # 2008”, de Matthew MacDonald, incluye un navegador de la Plantilla de Control en el Capítulo 15. Creo que simplemente puede descargar el código de muestra del sitio web de Apress.

Puedes usar una herramienta como ShowMeTheTemplate

Use Microsoft Blend para eso: pegue su código XAML completo en un archivo en esta herramienta y haga clic derecho en el control cuyo árbol visual desea percibir:

Seleccione la opción: Editar plantilla y listo

La clase XamlWriter le proporciona esta funcionalidad. Si controlName es el Nombre de un Control y luego usando el fragmento de abajo obtienes el Xaml de la Plantilla del Control dentro del objeto stringBuilder . Supongo que las herramientas mencionadas en las respuestas utilizan esta clase.

 var stringBuilder = new StringBuilder(); var xmlSettings = new XmlWriterSettings { Indent = true }; using (var xmlWriter = XmlWriter.Create(stringBuilder, xmlSettings)) { XamlWriter.Save(controlName.Template, xmlWriter); }