Создать ControlTemplate программно в WPF - PullRequest
5 голосов
/ 28 марта 2010

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

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;

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

Спасибо.

1 Ответ

5 голосов
/ 28 марта 2010

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

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

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

...