silverlight 4 知识归类与汇总(一)XAML篇

1. XAML的命名空间

在VS中创建一个silverlight项目

image

其中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中添加如下代码

image (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" />

上面将显示为一个内容为其自身高度的按钮image

可以通过空{}的方式摆脱标记扩展

 

        <Button Content="{}{Button}" Height="23" HorizontalAlignment="Left" Margin="12,64,0,0" 
Name="button1" VerticalAlignment="Top" Width="75" />
image

Silverlight 版本 4 不公开支持定义自定义标记扩展的基类。

SilverlightGuid.rar

posted on 2010-09-21 13:56  imbob  阅读(488)  评论(0编辑  收藏  举报

导航