Silverlight定制类&名称属性

时间:2010-01-21 07:23:27

标签: silverlight xaml

只是行为样本:

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)。

3 个答案:

答案 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"