我有一系列以以下结构开头的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);
但没有取得任何成功。我需要做什么?
答案 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#中的网格中划分内容,则更简单。