在代码隐藏中创建模板不是一个好主意,理论上可以通过定义ControlTemplate.VisualTree
这是一个FrameworkElementFactory
来做到这一点。
ControlTemplate template = new ControlTemplate(typeof(Button));
var image = new FrameworkElementFactory(typeof(Image));
template.VisualTree = image;
分配的属性是很婉转,因为你需要使用SetValue
和SetBinding
:
image.SetValue(Image.SourceProperty, ...);
另外,关于(以前)接受的答案和东西引述:
设置ControlTemplate 在编程上就像使用 XAML一样,因为我们必须使用 X amlReader类。
该陈述恰恰是错误的,我们没有“必须”。
如果我在运行时指定模板,我将它们定义为一个资源,如果我需要它可以加载它。
编辑:根据文档FrameworkElementFactory
被弃用:
这个类是被废弃的方法以编程方式创建模板,其是FrameworkTemplate的子类,如控件模板或DataTemplate中;当您使用此类创建模板时,并非所有模板功能都可用。以编程方式创建模板的推荐方法是使用XamlReader类的Load方法从字符串或内存流中加载XAML。
我不知道这个建议是不是一个好主意。就我个人而言,如果我可以避免使用字符串和XamlReader
来做这件事,我仍然会将该模板定义为XAML中的资源。
谢谢工作完美...我知道这不是一个好主意,但我在一个特定的情况下没有选择 – 2011-04-22 13:19:42
嗯,我只是引用我发现的网站的文本形式..和使用'XamlReader.Parse '? – 2011-04-22 14:25:27
@Ai_boy:它只是解析XAML,这是不必要的,也不是我会推荐的东西,如果您有静态XAML,最好将其创建为XAML资源,而不是将XML字符串窜改为代码隐藏。 – 2011-04-22 14:29:08