我一直在尝试编写正确的Xpath查询,但我似乎无法正确查看。它始终是错误或返回null ...
我有一个包含以下内容的XAML文件:
<ResourceDictionary>
<Style x:Key="settingsBtnStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource overrideButtonMouseOver}">
<Setter Property="Width" Value="64" />
<Setter Property="Height" Value="64" />
<Setter Property="Canvas.Left" Value="28" />
<Setter Property="Canvas.Top" Value="690" />
<Setter Property="Visibility" Value="Visible" />
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="Img\settings.png" />
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
我需要返回&#34; ImageBrush&#34;节点,但仅当x:Key
的{{1}}为&#34; settingsBtnStyle&#34;
我使用XPath Visualizer来确保我有正确的Xpath,它是:
Style
现在在WPF中我写了
ResourceDictionary/Style[@x:Key="settingsBtnStyle"]/Setter[@Property="Background"]/Setter.Value/ImageBrush
Visual Studio一直在崩溃,告诉我
&#34;命名空间前缀&#39; x&#39;没有定义。
如何定义该命名空间/修复Xpath?
答案 0 :(得分:3)
您需要将命名空间添加到XmlNamespaceManager
。这应该有效:
XmlNamespaceManager manager = new XmlNamespaceManager(xDoc.NameTable);
manager.AddNamespace("def", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
manager.AddNamespace("x", "http://schemas.microsoft.com/winfx/2006/xaml");
XmlNode test = xDoc.SelectSingleNode("//def:Style[@x:Key=\"settingsBtnStyle\"]/def:Setter[@Property=\"Background\"]//def:ImageBrush", manager);
答案 1 :(得分:1)
编辑:
我终于开始工作,但我不知道它是否有效。我不得不向经理添加两个名称空间:
manager.AddNamespace("x", "http://schemas.microsoft.com/winfx/2006/xaml");
manager.AddNamespace("ns1", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
然后我必须在每个元素之前添加ns1:
,如下所示:
var test = xDoc.SelectSingleNode("ns1:ResourceDictionary/ns1:Style[@x:Key=\"settingsBtnStyle\"]/ns1:Setter[@Property=\"Background\"]/ns1:Setter.Value/ns1:ImageBrush", manager);