flex4 xmlns:local Style:@namespace CDATA、ArrayCollection

本文介绍了Flex应用开发中的几个关键概念和技术细节,包括命名空间的使用方法、样式表中命名空间的作用、MXML文件中使用CDATA的原因及ArrayCollection的学习资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、xmlns:local='...' 怎么用

 

是命名空间那,等号后面的引入的路径我们可以直接组件化使用,local就是命名空间名,但他是默认的同application同目录下,
使用其中的mxml时,如果local下有个Example.mxml组件,就可以 <local:Example />

一般情况下xmlns:local='...'都不需要自己写的,
当你在相应位置引入组件时会自动为你添加上,还是<local:Example />, 当你键盘敲入左三角"<", Flex就开始提示了,你只需敲入"example",也可能不用全部打完这个词提示就已经出来了,回车输入,同时会自动为你在<mx:Application>中插入xmlns:local='...'这一行

源于【http://bbs.9ria.com/thread-53055-1-1.html】

 

二、

<fx:Style>

@namespace s "library://ns.adobe.com/flex/spark";

@namespace mx "library://ns.adobe.com/flex/halo";

s|Button {

color: #FF0000;

}

mx|DateChooser {

color: #FF0000;

}

</fx:Style>

@namespace s "library://ns.adobe.com/flex/spark";是什么意思。

 

Flash Builder 4中css style也加入了名称空间的支持

源于【flashbuilder4入门教程.pdf】

 

三、Flex中使用<mx:Script>代码块时,为什么要将代码内容放入CDATA结构中去?

 

题主先看一下CDATA的作用(来自W3School XML CDATA

所有 XML 文档中的文本均会被解析器解析。

只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

然后回到Flex中。
题主提到的是Flex特色之一的MXML文件带来的情况。MXML从名字能看出来,是一种XML文件,Flex中使用MXML类似HTML+JS的特性简化了可视页面的编写。
但是,虽然MXML类似HTML,但终归还是XML,<mx:Script>或<fx:Script>(取决于namespace)块中的AS脚本不使用CDATA 区段包裹,就很可能产生XML解析错误,编译器就无法取出<mx:Script>或<fx:Script>块中的AS代码。
为什么说很可能呢?在 XML 元素中,"<" 和 "&" 是非法的。除非你的AS脚本中能规避使用"<" 和 "&" 
题主可以试一下去除自己代码中的 “<![CDATA[” 和 “]]>”,看一下编译器的报错内容,
所以,在MXML中将AS内容放入CDATA是防止编译器将脚本块中的内容解释为XML。不太擅长组织语言,还请见谅。

源于【http://www.zhihu.com/question/23062040】

 

 

四、Flex中的ArrayCollection的学习

 

http://macleo.iteye.com/blog/892057

<think>好的,我现在需要解决用户的问题。用户之前在使用一个自定义的StringContainsConverter,原本的命名空间是xmlns:local="clr-namespace:TheUpload",但现在他把这个类移动到了TheUpload.Folder文件夹下,所以需要改成xmlns:local="clr-namespace:TheUpload.Folder"。用户担心这样的改动会不会影响其他现有的数据绑定,另外如果不想改命名空间,怎么在XAML中找到文件夹内的类。 首先,我需要确认命名空间声明在XAML中的作用。在WPF中,xmlns:local用于映射CLR命名空间到XAML命名空间,这样就能在XAML中引用该命名空间下的类。当用户将类移动到子文件夹时,默认情况下,C#项目的文件夹结构会影响生成的命名空间。比如,如果类原本在TheUpload命名空间,移动到Folder文件夹下,可能新的命名空间会是TheUpload.Folder,除非项目文件中的<RootNamespace>被修改过。因此,用户需要将XAML中的命名空间声明更新为xmlns:local="clr-namespace:TheUpload.Folder"才能正确引用转换器类。 接下来,用户担心更改命名空间是否会影响其他数据绑定。这时候需要考虑其他数据绑定是否也引用了TheUpload命名空间下的类。如果其他绑定使用的是原来的命名空间,比如在TheUpload中的其他类,那么将local指向TheUpload.Folder可能会导致这些绑定失效,因为它们现在无法找到原来的类。因此,用户需要检查所有使用local:引用的地方,确认是否有其他类还在原来的命名空间下。如果有,可能需要保留原来的命名空间声明,或者调整类的命名空间。 然后,用户第二个问题,如果不想更改命名空间声明,如何引用子文件夹中的类。这时候需要明确,XAML中的clr-namespace对应的是C#中的命名空间,而不是物理文件夹结构。如果用户不想修改XAML中的命名空间声明,可以通过修改C#类的命名空间,使其与原来的命名空间一致。例如,即使类文件放在Folder文件夹下,只要类的命名空间仍然是TheUpload,那么原来的xmlns:local="clr-namespace:TheUpload"仍然有效。这需要用户手动修改类的命名空间声明,或者在项目文件中配置<RootNamespace>,使得文件夹结构不影响生成的命名空间。 另外,如果用户无法修改类的命名空间,那么另一个方法是在XAML中使用完整的命名空间路径。比如,如果转换器类在TheUpload.Folder命名空间下,那么即使local被映射到TheUpload,也无法直接访问子命名空间中的类。这时候,用户需要为子命名空间添加另一个XMLNS声明,例如xmlns:folder="clr-namespace:TheUpload.Folder",然后在引用转换器时使用folder:StringContainsConverter。但用户可能不想这样做,因为需要修改XAML中的多个地方。 总结用户的选项:要么更新XAML中的命名空间声明并检查对其他绑定的影响,要么调整C#类的命名空间以保持原有XAML声明不变,或者添加新的命名空间映射。用户需要根据项目实际情况选择最合适的方法,并确保所有引用都正确无误。</think>$\textcolor{green}{\text{问题分析}}$: 当您将类移动到子文件夹后,需要调整XAML命名空间声明才能正确引用类。以下是详细解答: --- $\textcolor{green}{\text{对现有绑定的影响}}$: 1. **仅影响新引用的类** - 修改`xmlns:local="clr-namespace:TheUpload.Folder"`只会影响后续通过`local:`前缀引用的类 - 原有绑定若未使用`TheUpload.Folder`命名空间下的类,则不受影响 2. **潜在风险点** - 若其他代码/组件通过原命名空间`TheUpload`引用其他类,需同步调整这些类的命名空间 --- $\textcolor{green}{\text{不修改命名空间的解决方案}}$(二选一): $\textcolor{blue}{\text{方案1:保持原命名空间}}$ 修改C#类的实际命名空间声明(需在代码文件中操作): ```csharp // 原命名空间(导致需要修改XAML) namespace TheUpload.Folder { public class StringContainsConverter { ... } } // 改为(保持XAML无需修改) namespace TheUpload { public class StringContainsConverter { ... } } ``` $\textcolor{blue}{\text{方案2:使用完整嵌套命名空间}}$ 直接通过原命名空间引用子文件夹类: ```xml <!-- 原声明保持不变 --> xmlns:local="clr-namespace:TheUpload" <!-- 引用时包含子文件夹路径 --> <local:Folder.StringContainsConverter x:Key="ContainsConverter"/> ``` --- $\textcolor{green}{\text{验证方法}}$: ```xml <!-- 测试两种引用方式是否有效 --> <StackPanel> <!-- 原命名空间下的其他类 --> <local:OriginalClass/> <!-- 子文件夹下的转换器 --> <local:Folder.StringContainsConverter/> </StackPanel> ``` --- $\textcolor{red}{\text{重要建议}}$: 1. 使用$\textcolor{blue}{\text{方案1}}$可保持代码结构最清晰 2. 若选择修改命名空间声明,建议全局搜索`local:`引用确认影响范围 3. 推荐在类移动后使用$\textcolor{blue}{\text{Resharper}}$或$\textcolor{blue}{\text{Visual Studio的重构功能}}$自动同步命名空间 $\textcolor{green}{\text{最终推荐写法}}$: ```xml <!-- 保持原始声明 --> xmlns:local="clr-namespace:TheUpload" <!-- 直接引用子文件夹类 --> <local:Folder.StringContainsConverter x:Key="ContainsConverter"/> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值