我有一个像这样的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代码中是否有错误,我看不到?或者方法不好?
感谢您的回答
答案 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(但它也不会受到伤害 - 除了你的字符串变得不必要的大)。