XPath从Silverlight 5 XAML获取RowDefinitions和ColumnDefinitions

时间:2014-02-21 18:04:08

标签: xaml xpath xml-parsing silverlight-5.0

我有一系列以以下结构开头的Silverlight 5 XAML文档

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"  d:DesignWidth="1000" d:DesignHeight="800" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
   <Grid x:Name="LayoutRoot">
      <Grid.RowDefinitions>
         <RowDefinition Height="*" />
         <RowDefinition Height="*" />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
         <ColumnDefinition Width="280"></ColumnDefinition>
         <ColumnDefinition Width="50*"></ColumnDefinition>
         <ColumnDefinition Width="50*"></ColumnDefinition>
      </Grid.ColumnDefinitions>
      ...other content below

我需要一个允许我选择RowDefinition和ColumnDefinition元素的XPath表达式。

我试过了:

XmlDocument xdoc = new XmlDocument();
XmlNamespaceManager mgr = new XmlNamespaceManager(xdoc.NameTable);          
xdoc.LoadXml(xaml);
XmlNodeList rowDefinitions = xdoc.DocumentElement.ChildNodes[0].SelectNodes("//RowDefinition", mgr);

但没有取得任何成功。我需要做什么?

2 个答案:

答案 0 :(得分:0)

想出来,在这里发布答案,以防有人遇到同样的问题。

关键是您必须指定要解析的元素的名称空间,即使XAML没有明确声明该元素的名称空间。就我而言,添加:

mgr.AddNamespace("x", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");

然后将RowDefinition元素引用为:

xdoc.SelectNodes("//x:RowDefinition", mgr)

能够把它拉下来。

答案 1 :(得分:0)

为什么不像这样定义XAML中的结构

<Border Grid.Column="1" Grid.Row="1" BorderThickness="3" BorderBrush="Black" CornerRadius="10" Height="AUTO" Background="DarkGray">

在这种情况下,它用于边框但可以用于任何标记,如果想要定义如何在XAML端而不是C#中的网格中划分内容,则更简单。