XAML代码段是根据文件的数据生成的。
<Grid.RowDefinitions>
<RowDefinition Height='0*'/>
<RowDefinition Height='1*'/>
<RowDefinition Height='0*'/>
</Grid.RowDefinitions>
我的目标是将此代码段加载到:
<Window ...>
<Grid x:Name="TheGrid">
<!-- HERE -->
</Grid>
</Window>
因此,在编译之后,我可以在每次启动之前为我的软件定义网格布局。
我试过这样做:
using (Stream stream = GenerateStreamFromString(text))
{
var element = XamlReader.Load(stream) as UIElement;
grid.Children.Add(element);
}
问题是XamlReader.Load(...)
抛出异常:
属性元素'Grid.RowDefinitions'不包含在对象元素中。
行号“1”和行位置“2”。
问题(在我看来)是在加载环境中没有Grid
元素,因此存在无效引用。
如何解决这个问题或如何轻松实现同一目标?
答案 0 :(得分:1)
在这种情况下无需使用XAMLReader
- 只需使用代码直接添加它们,并按名称引用Grid
:
TheGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(0d, GridUnitType.Star)});
TheGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1d, GridUnitType.Star)});
TheGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(0d, GridUnitType.Star)});
答案 1 :(得分:1)
您的XAML代码段无效,因为它没有根元素。此外,RowDefinition
不是您添加到UIElement
的{{1}}集合中的Children
。
给出以下输入数据:
Grid
...您可以使用string data = "<Grid.RowDefinitions><RowDefinition Height='0*' /><RowDefinition Height='1*' /><RowDefinition Height='0*' /></Grid.RowDefinitions>";
和XDocument
来创建GridLengthConverter
:
RowDefinitions