2013-07-04 95 views
0

我想用FrameworkElementFactory来创建一个网格模板,但是如何定义它的RowDefinition如何使用WPF中的FrameworkElementFactory创建网格并设置RowDefinitations?

的代码

FrameworkElementFactory gridFactory = new FrameworkElementFactory(typeof(Grid)); 
FrameworkElementFactory RowDefinitionFactory1 = new FrameworkElementFactory(typeof(RowDefinition)); 
gridFactory.AppendChild(RowDefinitionFactory1); 
FrameworkElementFactory RowDefinitionFactory2 = new FrameworkElementFactory(typeof(RowDefinition)); 
gridFactory.AppendChild(RowDefinitionFactory2); 

会抛出异常......

因为<RowDefinitation>应在<Grid.RowDefinitations>

回答

3

FrameworkElementFactory已被弃用:

该类以编程方式创建模板的弃用方式, 它们是FrameworkTemplate的子类,如ControlTemplate或 DataTemplate;当您使用此类创建模板时,并非所有模板功能都可用。以编程方式创建模板的 的推荐方式是使用XamlReader类的Load方法从字符串或 内存流中加载XAML。

如果您需要以编程方式创建模板,建议的路线是使用XamlReader.LoadXamlReader.Parse

var template = 
    "<Grid>" + 
     "<Grid.RowDefinitions>" + 
      "<RowDefinition/>" + 
      "<RowDefinition/>" + 
     "</Grid.RowDefinitions>" + 
    "</Grid>"; 

var markup = XamlReader.Parse(template);