Шаблон элемента управления для существующих элементов управления в WPF - PullRequest
39 голосов
/ 13 октября 2009

Как получить существующий шаблон элемента управления в WPF в формате XAML (визуальное дерево)? Это поможет создать новый шаблон элемента управления с помощью существующего шаблона.

Ответы [ 7 ]

34 голосов
/ 13 октября 2009

Проверить StyleSnooper :


(источник: intuidev.com )

Он выведет стандартные стили (и, следовательно, шаблоны) для встроенных элементов управления. Вы также можете загрузить определенную библиотеку DLL, содержащую элементы управления WPF, и просмотреть для них стили по умолчанию.

30 голосов
/ 13 октября 2009

Стили вместе с примерами шаблонов доступны для загрузки на MSDN , см. Ссылку Default WPF Themes .

Однако вы также можете расширить существующий стиль, не переопределяя все, используя атрибут BasedOn.

16 голосов
/ 13 октября 2009

Если у вас есть Expression Blend , вы можете:

  1. Перетащите элемент управления на поверхность конструктора
  2. Щелкните правой кнопкой мыши элемент управления и выберите «Изменить шаблон» -> «Редактировать копию»

Когда вы сделаете это, Blend извлечет базовый шаблон из элемента управления и явно объявит его в документе / приложении как ресурс, который вы затем сможете редактировать по своему вкусу. Вы можете сделать это для любого контроля.

3 голосов
/ 19 декабря 2009

Книга Мэтью МакДональда "Pro WPF in C # 2008" включает браузер шаблона управления в главе 15. Я считаю, что вы можете просто загрузить пример кода с веб-сайта Apress.

1 голос
/ 15 июня 2013

Используйте Microsoft Blend для этого: Вставьте весь код XAML в файл этого инструмента и щелкните правой кнопкой мыши элемент управления, визуальное дерево которого вы хотите воспринимать:

Выберите опцию: Отредактируйте шаблон и все готово

1 голос
/ 13 октября 2009

Вы можете использовать такой инструмент, как ShowMeTheTemplate

0 голосов
/ 26 сентября 2013

Класс 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);
}
...