Шаблон элемента управления для существующих элементов управления в WPF
Как получить существующий шаблон элемента управления в WPF в формате XAML (визуальное дерево)? Это должно помочь создать новый шаблон контроля с помощью существующего шаблона.
7 ответов
Проверьте StyleSnooper:
http://www.blogs.intuidev.com/image.axd?picture=2010/5/StyleSnooper_TN.png
Он выведет стандартные стили (и, следовательно, шаблоны) для встроенных элементов управления. Вы также можете загрузить определенную библиотеку DLL, содержащую элементы управления WPF, и просмотреть стили по умолчанию для них.
Если у вас есть Expression Blend, вы можете:
- Перетащите элемент управления на поверхность конструктора
- Щелкните правой кнопкой мыши элемент управления и выберите "Изменить шаблон" -> "Редактировать копию".
Когда вы сделаете это, Blend извлечет базовый шаблон из элемента управления и явно объявит его в документе / приложении как ресурс, который вы затем сможете редактировать по своему усмотрению. Вы можете сделать это для любого контроля.
Книга Мэтью Макдональда "Pro WPF в C# 2008" включает браузер шаблона управления в главе 15. Я считаю, что вы можете просто загрузить пример кода с веб-сайта Apress.
Обновление 2020:
Все стили и шаблоны компонентов WPF теперь перемещены сюда.
Но перед созданием нового компонента просто проверьте это, чтобы увидеть, есть ли у вас хорошая альтернатива (возможно, изменение стиля может сработать).
Примечание. Обычно у него есть набор привязок DynamicResource, которые вы, возможно, захотите заменить своими и сделать статическими. Если вы не хотите выполнять много ручной работы, вы можете рассмотреть возможность использования второго решения ниже.
Второе и более короткое решение может заключаться в использовании Microsoft Blend для извлечения шаблона с помощью следующих шагов:
Щелкните правой кнопкой мыши элемент управления>
Edit Template
>Edit Current
ИЛИEdit a Copy
Но будьте осторожны с этим, так как он не всегда экспортирует весь шаблон,
а только его необходимую часть.
Просто подумайте о сравнении этого шаблона с официальным (упомянутым выше), чтобы убедиться, что все в порядке.
Используйте для этого Microsoft Blend: вставьте весь код XAML в файл в этом инструменте и щелкните правой кнопкой мыши элемент управления, визуальное дерево которого вы хотите воспринимать:
Выберите опцию: Изменить шаблон, и вы идете
Вы можете использовать такой инструмент, как ShowMeTheTemplate
Класс 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);
}