发布另一个答案,因为第一个答案很有用,但不能立即满足您的要求
您给我们的文件无效。它没有结束Window
标签。
您无法获取网格元素的原因是您没有提供要使用的命名空间。由于 Grid 元素没有命名空间前缀,我们可以假设它的命名空间是文档的默认命名空间;http://schemas.microsoft.com/winfx/2006/xaml/presentation
.
我怎么知道默认的文件是什么呢?由于文档中的第 2 行:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
编辑
该Element()
方法采用元素的 xml 名称 - 在这种情况下,您需要Grid
. 然后,您必须检查名称。
您可能希望简化代码。由于这是 XAML,您可以对格式做出假设。例如,window 将只有一个子元素。
这是我的测试代码。+
这里有各种各样的隐式运算符,尽管类型很奇怪,但它们会使运算符编译。不用担心:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Linq;
namespace XamlLoad
{
class Program
{
static void Main(string[] args)
{
string file = @"<Window x:Class=""WpfApplication1.MainWindow""
xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
Title=""MainWindow"" Height=""350"" Width=""525"">
<Grid x:Name=""Content"">
</Grid>
</Window>";
var doc = XDocument.Load(new StringReader(file));
XNamespace xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
XNamespace x = "http://schemas.microsoft.com/winfx/2006/xaml";
var gridElement = doc.Root.Elements(xmlns + "Grid").Where(p => p.Attribute(x + "Name") != null && p.Attribute(x + "Name").Value == "Content");
}
}
}