Создайте ControlTemplate программно в WPF

Как я могу программно установить шаблон кнопки?

Polygon buttonPolygon = new Polygon();
buttonPolygon.Points = buttonPointCollection;
buttonPolygon.Stroke = Brushes.Yellow;
buttonPolygon.StrokeThickness = 2;

// create ControlTemplate based on polygon
ControlTemplate template = new ControlTemplate();
template.Childeren.Add(buttonPolygon); // This does not work! What's the right way?

//create button based on controltemplate
Button button = new Button();
button.Template = template;

Таким образом, мне нужен способ установить мой Полигон как шаблон кнопки. Предложения?

Спасибо.

5
задан Furqan Safdar 30 September 2012 в 19:06
поделиться

1 ответ

Официально вы должны создать XAML для нового ControlTemplate в виде строки, а затем материализовать его как объект ControlTemplate с помощью XamlReader.Parse.

Более структурированный способ сделать это - использовать класс FrameworkElementFactory - создать FrameworkElementFactory и установить ControlTemplate.VisualTree для этого FEF.Это обеспечивает повышенную безопасность типов и позволяет избежать неудобства при написании дерева объектов только для того, чтобы прочитать его снова. Однако он официально устарел и может стать довольно сложным, если у вас сложный шаблон.

См. Как настроить шаблон данных WPF в коде для древовидного представления? для примеров обоих подходов - они написаны в контексте DataTemplate, но также будут работать для ControlTemplate.

5
ответ дан 14 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: