Да, вы можете сделать это с помощью FrameworkElementFactory. Чарльз Петцольд имеет пошаговое руководство по этому вопросу в главе 11 «Applications = Code + Markup», но основная идея состоит в том, что вы создаете FrameworkElementFactory для корневого элемента шаблона (и дальнейшие фабрики для любых дочерних элементов), создаете ControlTemplate и устанавливаете свойство VisualTree элемента ControlTemplate для FrameworkElementFactory:
FrameworkElementFactory borderFactory = new FrameworkElementFactory(typeof(Border));
// set properties and create children of borderFactory
ControlTemplate template = new ControlTemplate();
template.VisualTree = borderFactory;
myButtonInstance.Template = template;