使用XamlReader从字符串创建网格

时间:2010-09-24 10:58:27

标签: wpf grid xamlreader

我有一个像这样的XAML网格的字符串表示:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Canvas Background="Yellow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <Label Content="textik" />
    </Canvas>
</Grid>

我需要做的是从这个字符串中创建一个Grid对象。我尝试了很多方法,但到目前为止最接近的是下面的代码:

string content = "<Grid xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Canvas Background=\"Yellow\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Label Content=\"textik\" /></Canvas></Grid>";

// the string is created programatically, I just put it here to see what it looks like at the end of the process

Stream stream = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(content));

object objGrid = XamlReader.Load(stream);
Grid myGrid = (Grid) objGrid;

但是,XamlParsedException会出现缺少根元素的情况。

我在XAML代码中是否有错误,我看不到?或者方法不好?

感谢您的回答

2 个答案:

答案 0 :(得分:2)

您使用的是哪种版本的框架?在4中,您可以在System.Xaml中使用更灵活的其他类。您可以使用System.Xaml.XamlServices.Load(stream);在松散的xaml中获取确切的Grid对象。但是,在VS2010中同时使用4和3.5,您的确切代码(在第二个片段中)将返回预期结果。不确定您的问题是什么,但可能不是您发布的代码。

答案 1 :(得分:0)

尝试将xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"添加到根网格元素。此外,你不需要在Canvas中再次使用xmlns(但它也不会受到伤害 - 除了你的字符串变得不必要的大)。