只是行为样本:
namespace XAMLParserBug
{
public class MyCustomClass
{
public int ID { get; set; }
public string Name { get; set; }
}
}
然后在XAML中使用它:
<UserControl x:Class="XAMLParserBug.MainPage"
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"
xmlns:local="clr-namespace:XAMLParserBug"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<UserControl.Resources>
<local:MyCustomClass ID="1" Name="My Name With Spaces" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
然后得到错误:
'我的空间名称'不是名称
的有效值
是XAML解析器错误还是众所周知的行为?
<小时/> 的加了:
无论如何,在这种情况下,WPF XAML解析器正确处理了Name属性(VS 2008 SP1)。
答案 0 :(得分:4)
根据MSDN文档here:
在标记中定义的具有Name或x:Name属性的每个object元素都会生成一个 具有与XAML名称匹配的CLR名称的内部字段。
因此,Name属性中的任何内容都必须符合字段标识符名称的规则。
我个人希望XAML只使用x:Name
表单为项目创建字段,并且至少对非UIElement类型放宽Name
的规则,但事实并非如此。
答案 1 :(得分:1)
不要在XAML中使用Name作为属性:它由x:Name。
保留答案 2 :(得分:0)
XAML的命名语法可以在这里找到:
http://msdn.microsoft.com/en-us/library/ms742534.aspx
所提到的字符都不是“空格”,因此不允许以下内容:
My Name With Spaces
然而这是允许的:
MyNameWithSpaces
你的一条评论让我感到惊讶(对不起,如果我错了)你可能会混淆Names with Spaces的名称空间,因为这些概念是分开的,因为命名空间就像:
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
使用下面的命名空间引用:
x:Name="ObjectName"