如何在XAML(Silverlight 4)中输入包含点字符的字符串文字?

时间:2010-09-03 13:46:45

标签: .net xaml silverlight-4.0

也许这是显而易见的事,但这就是我所拥有的。我需要在XAML中编写一个字符串。没关系,但是如果字符串里面有点字符,那么XAML解析器就会失败。我尝试了各种逃避,但没有任何帮助。

            <datafilter:ItemPropertyDefinition Name="Players.Count"
                                               PropertyType="{Binding Int32, ElementName=Types}" 
                                               DisplayName="Squad Size">
            </datafilter:ItemPropertyDefinition>

无论我做什么,我都不能有一个包含点的字符串文字。 XAML解析器总是告诉:

“Players.Count”不是Name的有效值。

有什么想法吗?提前谢谢。

罗森

3 个答案:

答案 0 :(得分:1)

这不是文字,而是Name属性。你不能拥有“。”在Name中,就像你不能用“。”命名变量一样。在代码中。

在您的示例中,访问DisplayName属性将写为:Players.Count.DisplayName,这是没有意义的。

您认为适当的命名约定是PlayerCount。

答案 1 :(得分:0)

我发现了发生了什么事。真是太棒了。只是命名的巧合。

ItemPropertyDefinition是我的OWN类。它是一个DependencyObject。它有一个名为Name的字符串DependencyProperty。它被称为Name,因为它拥有事物的名称。

也许“聪明”的XAML解析器不允许Name属性中的点完全忽略这是MY类的事实,这是我的属性。

我必须将其更改为名为PropertyName,否则我将弄乱DependencyObject.Name属性。

答案 2 :(得分:0)

XAML使用Namex:Name属性对元素名称进行特殊处理。来自FrameworkElement.Name Property

  

用于Name的字符串值具有一些限制,这是由XAML规范定义的基础x:Name指令强加的。最值得注意的是,名称必须以字母或下划线字符(_)开头,并且必须仅包含字母,数字或下划线。有关更多信息,请参阅WPF XAML Namescopes。

一般情况下,在定义Name时应避免定义FrameworkElement属性。