我有一个问题,我需要能够在XAML绑定中使用XPath,而我正在进行的比较中可以有单引号或撇号(以及双引号)
这是我的XAML - 我试图将Text绑定为元素的 Value 属性,其中 Name 属性为“Field'end”:
<Canvas Width="9.5cm" Height="6.5cm" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="RootCanvas2">
<Canvas.Resources>
<XmlDataProvider x:Key="UserData" XPath="User" Source="MockUser.xml"></XmlDataProvider>
</Canvas.Resources>
<Viewbox StretchDirection="DownOnly" VerticalAlignment="Center" HorizontalAlignment="Left" Canvas.Top="1.0cm" Canvas.Left="0.0cm" Width="3.0cm" Height="0.8cm" >
<TextBlock Text="{Binding Source={StaticResource UserData}, XPath=Fields/Field[@Name\=\'Field \' end\']/@Value}" />
</Viewbox>
</Canvas>
以下是我正在使用的XML示例。
<?xml version="1.0" encoding="utf-8" ?>
<User>
<Fields>
<Field Name="Last Name" Value="Smith" />
<Field Name="First Name" Value="John" />
<Field Name="Personnel ID" Value="000001" />
<Field Name="Field "quote"" Value="000021" />
<Field Name="Field ' end" Value="000056" />
</Fields>
</User>
问题是我无法在XAML中包含的XPath中正确转义'。
我尝试过使用concat(似乎不可用,或任何其他功能),逃避\',只是有'等等似乎没什么用。有什么想法吗?
对于某些背景,我无法更改数据的机制。用户数据将始终以XML格式提供,作为XmlDataProvider。
我能用类似的双引号来表达:
<Viewbox StretchDirection="DownOnly" VerticalAlignment="Center" HorizontalAlignment="Left" Canvas.Top="0.0cm" Canvas.Left="0.0cm" Width="3.0cm" Height="0.8cm" >
<TextBlock Text="{Binding Source={StaticResource UserData}, XPath=Fields/Field[@Name\=\'Field \"quote\"\']/@Value}" />
</Viewbox>
在这种情况下,有没有办法逃避单一报价?
答案 0 :(得分:3)
要使用XPath
搜索包含引号的某些值,您必须使用Binding的元素语法,以便XPath
可以设置为如下属性:
<TextBlock>
<TextBlock.Text>
<Binding Source="{StaticResource UserData}"
XPath="Fields/Field[@Name="Field ' end"]/@Value"/>
</TextBlock.Text>
</TextBlock>