ControlTemplate for existing controls in WPF
Asked Answered
O

8

40

How to get existing control's ControlTemplate in WPF in XAML format (visual tree)? This is to help to create new ControlTemplate with the help of existing template.

Overprint answered 13/10, 2009 at 10:3 Comment(0)
G
30

The styles along with template examples are up on MSDN for download, see the Default WPF Themes link.

However you can also extend the existing style without redefining everything by using the BasedOn attribute.

Goliath answered 13/10, 2009 at 14:21 Comment(1)
Argh matey! Your link be sunk in Davey Jones locker!Near
R
37

Check out StyleSnooper:

enter image description here

It will dump out the standard styles (and therefore templates too) for the built in controls. You can also load in a specific DLL that contains WPF controls and view the default styles for those too.

Recently answered 13/10, 2009 at 10:42 Comment(4)
@doron-yaacoby, I have found another link to download from: blog.tomaskafka.com/book/export/html/112Treacle
@NicolaiShestakov, thanks, I've updated the link in the answer.Recently
@Glorfindel, you're doing great work with these edits! I've seen several from you now. Thanks!Recently
I would like to add what is probably the newest link: github.com/drewnoakes/style-snooperSulfapyridine
G
30

The styles along with template examples are up on MSDN for download, see the Default WPF Themes link.

However you can also extend the existing style without redefining everything by using the BasedOn attribute.

Goliath answered 13/10, 2009 at 14:21 Comment(1)
Argh matey! Your link be sunk in Davey Jones locker!Near
B
17

If you have Expression Blend you can:

  1. Drag the control onto the design surface
  2. Right click the control and choose Edit Template -> Edit Copy

When you do this, Blend will extract the base template from the control and explicitly declare it within document/application as a resource which you can then edit to your liking. You can do this for any control.

Birefringence answered 13/10, 2009 at 12:58 Comment(1)
I think this answer should get more attention, it is probably the best way to do this.Ricketts
C
3

The book "Pro WPF in C# 2008", by Matthew MacDonald, includes a Control Template browser in Chapter 15. I believe you can simply download the sample code from the Apress web site.

Celeriac answered 19/12, 2009 at 13:15 Comment(0)
L
2

2020 Update:

All the styles and templates of WPF components are now moved here.
But, before creating a new component, just check this to see if you have a good alternative to that (maybe changing the style can work).
Note: Usually, it has a bunch of DynamicResource bindings that you might want to replace with yours and make static. If you don't want to do much manual work, you might consider using the second solution below.

The second and shorter solution might be using Microsoft Blend to extract the template with the following steps:

Right-click on the control > Edit Template> Edit Current OR Edit a Copy

But be careful with this one, as it doesn't always export the whole template,
but the necessary part of it.
Just consider comparing this template with the official one (mentioned above) to make sure everything is fine.

Liew answered 22/3, 2020 at 21:11 Comment(0)
P
1

You can use a tool like ShowMeTheTemplate

Pretoria answered 13/10, 2009 at 10:9 Comment(2)
Is there a code to get it in XAML format?(like view the visual tree in tree format)Overprint
yes, since this tool does it... you can look at the code, it's provided in the zip filePretoria
A
1

Use Microsoft Blend for it: Paste your entire XAML code in a file in this tool and right click the control whose visual tree you want to perceive:

Select the option: Edit template and there you go

Amourpropre answered 15/6, 2013 at 6:4 Comment(0)
U
0

The XamlWriter class provides you with this functionality. If controlName is the Name of a Control then using the below snippet you get the Xaml of the Control's Template inside the stringBuilder object. I guess tools mentioned in the answers utilize this class.

var stringBuilder = new StringBuilder();
var xmlSettings = new XmlWriterSettings
{
  Indent = true
};

using (var xmlWriter = XmlWriter.Create(stringBuilder, xmlSettings))
{
  XamlWriter.Save(controlName.Template, xmlWriter);
}
Undrape answered 26/9, 2013 at 18:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.