Шаблон управления существующими элементами управления в WPF

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

Ответ 1

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

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

Ответ 2

Проверьте StyleSnooper:


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

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

Ответ 3

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

  • Перетащите элемент управления на поверхность дизайна
  • Щелкните правой кнопкой мыши элемент управления и выберите "Редактировать шаблон" → "Редактировать копию"

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Выберите параметр: Измените шаблон, и там вы идете

Ответ 7

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