2010-03-28 1 views
4

Как я могу программно установить шаблон кнопки?Создать программный шаблон в 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; 

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

Спасибо.

ответ

4

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

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

См. How to setup a WPF datatemplate in code for a treeview? для примеров обоих подходов - они написаны в контексте DataTemplate, но также будут работать и с ControlTemplate.

+2

Yuck. Спасибо, в любом случае. :-) –