silverlight 4 知识归类与汇总(一)XAML篇
1. XAML的命名空间
在VS中创建一个silverlight项目
其中MainPage.xaml的内容如下
<UserControl x:Class="SilverlightGuid.Xaml.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:myCore="http://silverlight.imbob.com.cn" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <myCore:MyButton HorizontalAlignment="Left" Name="myButton1"
VerticalAlignment="Top" Margin="12,12,0,0" /> </Grid> </UserControl>
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
是一个XML命名空间,其映射了多个.NET命名空间System.Windows,System.Windows.Automation
例如可以在Core项目的AssemblyInfo.cs中添加如下代码
(using System.Windows.Markup;)
[assembly: XmlnsDefinition("http://silverlight.imbob.com.cn", "SilverlightGuid.Core")]
x: 前缀/XAML 语言 XAML 命名空间包含多个将在 Silverlight XAML 中频繁使用的编程构造。下面列出了最常见的 x: 前缀/XAML 命名空间构造:
-
x:Key:为 ResourceDictionary 中的每个资源设置一个唯一键。
-
x:Class:指定为 XAML 页提供代码隐藏的类的 CLR 命名空间和类名称,并命名由标记编译器在 Silverlight 应用程序模型中创建的类。您必须具有一个这样的类才能支持代码隐藏或支持初始化为 RootVisual。正是出于这些原因,所以您几乎总是看到映射了 x:,即使没有任何资源且您从不使用 x:Name 也不例外。
-
x:Name:处理 XAML 中定义的对象元素后,为运行时代码中存在的实例指定运行时对象名称。对于不支持更为方便的 FrameworkElement.Name 属性的非常见情形,您可以将 x:Name 用于元素命名方案。
2.类型转换器
<Button Background="White" Content="Button" />
与之等价的C#代码为
button1.Content = "OK"; button1.Background = new SolidColorBrush(Colors.White);
这是怎么回事呢? 嗯,这很简单:分析器使用一个类型转换器转换成正确的对象的字符串。 在实践中,类型转换器对象是从TypeConverter 类继承的。 您可以将一个类型转换器的类型或属性通过使用 TypeConverterAttribute。 分析器将尊重这一选择,并使用指定的类型转换器转换成对象类型。
在Silverlight中,非托管类型转换器是为履行共同的转换您最希望发生(需要在内部SilverlightTypeConverter看看使用类,你会发现,你最终用“托管”XcpImports型)。
你仍然可以为您建立和使用自己的类型转换器类型。 XAML的解析器将始终检查当前的value/type,如果它与一个托管类型转换器相关的,它会履行这种关系,你的转换器将被使用。
3.标记扩展
Silverlight 支持在其默认的 Silverlight XAML 命名空间下定义且其 XAML 分析器可以理解的以下标记扩展。
-
Binding:支持数据绑定,此绑定将延迟属性值,直至在数据上下文中解释此值。
-
StaticResource:支持引用在 ResourceDictionary 中定义的资源值。
-
TemplateBinding:支持 XAML 中可与模板化对象的代码属性交互的控件模板。
-
RelativeSource:启用特定形式的模板绑定。
<Button Background="White" Content="{Binding Path=Height,RelativeSource={RelativeSource Self}}"
Height="23" HorizontalAlignment="Left" Margin="126,0,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
可以通过空{}的方式摆脱标记扩展
<Button Content="{}{Button}" Height="23" HorizontalAlignment="Left" Margin="12,64,0,0"
Name="button1" VerticalAlignment="Top" Width="75" />
Silverlight 版本 4 不公开支持定义自定义标记扩展的基类。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。