WPF学习笔记(2)——x名称空间详解 上

    先说一些基本的, .NET的模块称为程序集(Assembly)。一般情况下,用VS创建的是解决方案(Solution),一个解决方案就是一个完整的程序。解决方案中包含若干个项目

(Project),每个项目是可以独立编译的,他的编译结果是一个程序集。常见的程序集是以.exe为扩展名的可执行程序或者是以.dll为扩展名的动态链接库,大多数情况下,我们

说“引用其他程序集”的时候,说的是动态链接库。因为.NET编程接口(Application Programming Interface, API)以类和类级别的单元为主,所以我们又常把引用程序集说成是引

用类库。名称空间的作用是避免同名类的冲突。比如一个程序中引用了LibA.dll和LibB.dll两个类库,这两个类库中都有一个叫Converter的类,若没有名称空间来限定,编译器可能

会弄混。应用名称空间,把LibA.dll中的Converter放在一个名为Microsoft的名称空间,LibB.dll中的Converter放在名为Google名称空间里,就可以用Microsoft.Converter和

Google.Converter来区分这两个类了。

  假设类库程序集名为MyLibrary.dll,其中包含Common和Controls两个名称空间,且已经将其引用进WPF项目,那么在XAML中引用这两个名称空间的语法是:

   xmlns:映射名=“clr-namespace:类库中名称空间的名字;assembly=类库文件名”
对于MyLibrary.dll里的两个名称空间,XAML中的引用会是:

   xmlns:common="clr-namespace:Common;assembly=MyLibrary"
   xmlns:controls="clr-namespace:Controls;assembly=MyLibrary"
使用Common和Controls中的类,代码是这样:

   <common:MessagePanel x:Name="window1"/>
   <controls:LedButton x:Name="button1"/>
  在C#中引用Common和Controls名称空间时可以如下所写:

   using Cmn=Common;
   using Ctl=Controls;
  x名称空间映射的是 http://schemas.microsoft.com/winfx/2006/xaml,亦可称为"XAML名称空间"。其里面主要分为三类:Attribute,标记扩展和XAML指令元素。

  x名称空间中的Attribute


 1.  x:Class

  这个Attribute 的作用是告诉XAML编译器将XAML标签的编译结果与后台代码中指定的类合并。使用时的要求:

  这个Attribute只用于根结点;使用x:Class的根结点类型与x:Class的值所指示的类型保持一致;x:Class的值所指示的类型在声明时必须用partial关键字

  注意:x:ClassModifier的值必须与x:Class所指示类的访问控制级别一致。若XAML文档中 x:ClassModifier="internal" ,编译器会报错,因为实际上在C#中定义的级别是public.

  在C#中,private与internal等价


 2.  x:Name

 作用有两个:

 告诉XAML编译器,当一个标签带有x:Name时,除了为这个标签生产对应实例外还要为这个实例声明一个引用变量,变量名就是x:Name的值;

 将XAML标签所对应对象的Name属性(如果有)也改为x:Name的值,并把这个值注册到UI树上,以方便查找。


 3.  x:FieldModifier

 默认情况下,字段的访问级别按照面向对象的封装原则被设置成了 internal. 在编程时,有时候我们需要从一个程序集访问另一个程序集中窗体的元素。这时需要把被访问控件的引用变量改为public级别,x:FieldModifier就是用来在XAML里改变引用变量访问级别的,如:

<StackPanel>
     <TextBox x:Name="textBox1" x:FieldModifier="public" Margin="5"/>
     <TextBox x:Name="textBox2" Margin="5"/>
</StaclPanel>
 用IL得子段textBox1级别为public ,而子段textBox2为internal (assembly class)

 4.  x:Key

 作用就是为资源贴上用于检索的索引

<Window x:Class="Wpftest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="500" Width="900">
    <Window.Resources>
        <sys:String x:Key="myString">Hello WPF Resource!</sys:String>
    </Window.Resources>
    <StackPanel Background="Gray">
        <TextBox Text="{StaticResource ResourceKey=myString}" Margin="5"/>
        <TextBox x:Name="textBox1" Margin="5"/>
        <Button Content="Show" Click="Button_Click" Margin="5"/>
    </StackPanel>
</Window>

namespace Wpftest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
       public MainWindow()
       {
           InitializeComponent();
       }

       private void Button_Click(object sender, RoutedEventArgs e)
       {
           string str = this.FindResource("myString") as string;
           this.textBox1.Text = str;
       }
    }
}

 5.  x:Shared

 一定与x:Key 配合使用。若x:Shared的值为true, 那么每次检索到这个对象时,我们得到的都是同一个对象,否则若x:Shared的值为false. 每次我们检索到这个对象时,我们得到

的都是这个对象的一个新副本。XAML编译器会为该资源隐藏地添加 x:Shared="true"




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值