`

浅谈WPF中x名称空间(一) .

 
阅读更多

   不知道各位同行在创建第一个WPF应用程序时,由编译器自动生成的xaml代码,对于Window这个根节点处,有没有发现x:Class=""这样的字样没?还有在使用时有没有用到诸如x:Key=""或者x:Name=""等等。这些有一个共同点,那就是都以x开头。x是xaml名称空间的简称,映射的是http://schemas.microsoft.com/winfx/2006/xaml。它包含的类都是与解析XAML语言相关的,好了,让我们来见到的谈谈这所谓的x名称空间吧!

  与C#一样,XAML也有自己独立的编译器。XAML会被解析和编译,最终形成微软的中间语言存储在程序集中。在解析和编译XAML的语言过程中,我们经常需要告诉编译器一些重要的信息,比如XAML代码的编译结果应该与哪个C#代码的编译器合并、使用XAML声明的元素师public还是private访问级别等等。这些让程序员能够与XAML编译器沟通的工具就存在x名称空间中。

  在x名称空间下包含三种类型的工具:

       一、Attribute类型的工具

       二、标签扩展类型的工具

       三、XAML指令元素类型的工具

下面我们就分别介绍一下吧!

   一、x名称空间中的Attribue

     提到Attribute,不由的想起我学习编程的时候,属性这个概念,在英文的技术文章中存在Attribute和Property这两个概念,用中文翻译都可以译为“属性”。既然都为“属性”那么它们之间有什么区别呢?通过查阅资料,有这样的解释:Attribute和Property是两个层面的东西,Attribute是语言层面上的东西,是给编译器看的,而Property是面向对象层面上的东西,是给编程逻辑用的。对于两者更贴切的翻译应该是Atrribute被译为“特征”,而Property被译为属性。好了,我们还是来看看x名称空间中的Attribute。

1、x:Class 这个Attribute的作用是告诉XAML编译器将XMAL标签的编译结果与后台代码中指定的类合并。使用该Attribute必须遵循一些要求:

  •           该Atrribute只能用于xaml的根节点中
  •           使用x:Class的根节点的类型要与x:Class的值所指示的类型保持一致
  •           x:Class的值所指示的类型在声明时必须使用partial关键字

示例代码如下:

前台的xaml代码:

<Window x:Class="WpfApplication3.Window9"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window9" Height="300" Width="300">

 

后台的cs代码:

public partial class Window9 : Window
    {
        public Window9()
        {
            InitializeComponent();
            List<Student> students = new List<Student>(){
                new Student(){Id=1,Name="Tim",Age=21},
                new Student(){Id=2,Name="Tom",Age=22},
                new Student(){Id=3,Name="Jim",Age=23}
            };

            this.listBox1.ItemsSource = students;
            //this.listBox1.DisplayMemberPath = "Name";

            Binding bind = new Binding("SelectedItem.Name") { Source = this.listBox1 };
            this.textBox1.SetBinding(TextBox.TextProperty, bind);
        }
    }

 

2、x:ClassModifier 这个Attribute的作用是告诉XAML编译器生成的类是有什么样的访问修饰符修饰的。在使用该Attribute的时候必须注意:

  • 使用该Attribute的标签必须具有x:Class Attribute
  • x:ClassModifier的值必须与x:Class的值所指示的类型的访问修饰符保持一致

比如你在xaml代码中的Window标签中使用了x:ClassModifier="public",那么首先该标签中必须存在x:Class=""这样的Attribute-Value。同时xaml对应的cs代码这个类必须也是public的。

3、x:Name  关于这个Attribtue,我给它的定义就相当于一个人的名字,用于区分。举这样一个例子吧!如果现实生活中,一位老师第一次到一个班去上课,此时她没有同学们的资料,这样你能分别出各位同学吗?如果老师有同学们的资料,那么老师可以根据念姓名来找到对应的同学,那x:Name就有这样的作用了!

     x:Name的作用有两个:

  • 告诉XAML编译器,当一个标签带有x:Name属性时,除了为这个标签生成对应的实例外还为这个实例声明一个引用变量,变量名就是x:Name的值
  • 如果设置了x:Name的标签具有Name的属性,那么将Name属性的值设为x:Name的值,并把这个值注册到UI树上,以达到方便查找的目的

4、x:FieldModifier 关于这个Attribute,是用来设置引用变量的访问修饰符的。但是必须在使用了x:Name的标签中使用x:FieldModifier属性。因为x:FieldModifier对应的值是为x:Name所生成的引用变量设置访问修饰符的。

5、x:Key 在任何的xaml中我们都可以定义Resource,我们可以提取一些内容放置在Resource中,当然每种内容都必须有自己独特的标识,那x:Key就是这个作用了,在使用某种内容时,我们就可以根据x:Key 来检索对应的资源了。

6、x:Shared  在利用Attribute x:Key检索对象时,都会得到一个对象,如果所检索的对象未使用x:Shared标签,那么第一次检索对象时得到一个对象,当第二次使用时那么只能得到第一次检索对象的一个副本。不断的使用同一检索对象,在内存中副本就会增加,同时也加大了内存的消耗。如果所检索的对象中使用了x:Shared="true"标签,那么不管重复使用多次所检索的对象,都是使用的同一个对象。这就减少了内存的消耗了!

分享到:
评论

相关推荐

    WPF 24小时自学教程 Teach.Yourself.WPF.in.24.Hour

    WPF 24小时自学教程 Teach.Yourself.WPF.in.24.Hour

    WPF-JJDown-v1.234.0

    【压缩包子文件的文件名称列表】中仅有 "[WPF]JJDown" 这一项,这意味着压缩包内包含的是WPF应用程序的主体部分,可能包括可执行文件、资源文件、配置文件等。用户解压后,很可能是直接运行这个文件来启动JJDown应用...

    WPF远程桌面AxInterop.MSTSCLib.dll Interop.MSTSCLib.dll 一个demo

    在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 应用程序中实现远程桌面功能,重点是使用AxInterop.MSTSCLib.dll和Interop.MSTSCLib.dll这两个组件。这两个组件是Microsoft Terminal ...

    wpfx.org-Notepad.rar

    wpfx.org-Notepad.rar

    WPF Extended.Wpf.Toolkit 加载界面 Demo

    WPF(Windows Presentation Foundation)是.NET框架的一部分,用于构建具有丰富图形、多媒体和数据绑定功能的桌面应用程序。在开发WPF应用时,我们常常需要为用户提供一个加载界面,以显示程序启动或执行长时间操作...

    WPF基于Vlc.DotNet.Wpf封装的视频播放器

    在本文中,我们将深入探讨如何使用WPF(Windows Presentation Foundation)和Vlc.DotNet.Wpf库来封装一个自定义的视频播放器。WPF是.NET Framework中的一个UI框架,提供了丰富的图形渲染和用户交互能力。而Vlc....

    Actipro.WPF.Studio.v11.1.0541

    [专业WPF用户界面控件].Actipro.WPF.Studio.v11.1.0541.Incl.Keygen-Lz0 激活码!!!!!!!!!!!!

    WPF.Themes经典的wpf主题样式,包含22种不同样式,一行代码即可改变全部窗体的样式。

    在客户端的Settings.settings配置文件里添加一条Themes键,类型为string,值为相应的主题文件夹名称如WhistlerBlue。 使用时在启动窗体的loaded事件里添加一行 WPF.Themes.ThemeManager.ApplyTheme(Application....

    WPF集成Microsoft.Toolkit.Uwp.Notifications实现系统消息通知.zip

    C#、WPF使用技巧,实战应用开发小系统参考资料,源码参考。经测试可运行。 详细介绍了一些WPF框架的各种功能和模块,以及如何使用WPF进行GUI开发、网络编程和跨平台应用开发等。 适用于初学者和有经验的开发者,能够...

    WPF深入浅出(高清.书签)

    《WPF深入浅出》是一本专注于Windows Presentation Foundation(WPF)技术的书籍,由国内作者撰写,确保了内容的准确性和本地化适应性。WPF是微软.NET Framework中的一个关键组件,它提供了构建富客户端应用程序的...

    xceed.wpf.toolkit库

    Xceed.WPF.Toolkit是一个强大的WPF(Windows Presentation Foundation)扩展库,由Xceed Software公司开发。这个库为开发者提供了许多预构建的UI控件和功能,使得在构建现代、美观且功能丰富的WPF应用程序时更加便捷...

    WPF HelixToolkitWPF 中文手册 HelixToolkitWPF中文手册.pdf

    WPF HelixToolkitWPF 中文手册 HelixToolkitWPF中文手册.pdf

    WPF 内嵌 Xilium.CefGlue 浏览器

    在IT行业中,尤其是在Windows Presentation Foundation (WPF)应用开发中,有时我们需要在应用程序内部集成一个浏览器组件,以便用户能够浏览网页内容或者实现某些基于Web的功能。`Xilium.CefGlue`就是这样一个库,它...

    Xceed.Wpf.AvalonDock dll下载

    《Xceed.Wpf.AvalonDock:一个强大的WPF文档管理库》 Xceed.Wpf.AvalonDock是一款专门用于Windows Presentation Foundation (WPF) 应用程序的库,它提供了一种高度可定制和灵活的文档和工具窗口管理解决方案。这个...

    LoadingIndicators.WPF, WPF加载指示器的集合.zip

    LoadingIndicators.WPF, WPF加载指示器的集合 LoadingIndicators.WPF LoadingIndicators.WPF 是 8个用于WPF的动画加载指示器,与 MahApps.Metro 兼容。样式弧线弧形环双弹跳FlipPlane脉冲响铃三点

    DevExpress.WPF.v19.2.chm.zip

    DevExpress.WPF.v19.2.chm.zip是一个包含DevExpress WPF V19.2英文帮助文档的压缩包,其中的核心文件是"DevExpress.WPF.v19.2.chm",这是一个CHM(Microsoft Compiled HTML Help)格式的文件,通常用于存放软件的...

    Wpf 实现视频拍摄 DirectX.Capture 和AForge

    在本文中,我们将深入探讨如何在WPF应用中实现视频拍摄功能,主要涉及DirectX.Capture和AForge这两个类库。这两个库都是Windows Presentation Foundation (WPF)开发中用于捕获视频和图像的重要工具。 首先,DirectX...

    gong-wpf-dragdrop, GongSolutions.WPF.DragDrop 库是WPF的拖动'n'拖放框架.zip

    gong-wpf-dragdrop, GongSolutions.WPF.DragDrop 库是WPF的拖动'n'拖放框架 简介GongSolutions.WPF.DragDrop 库是一个易于使用的拖拉'n'拖放框架。特性使用 MVVM: 拖放逻辑可以放在ViewModel中。 代码不需要放在in中...

    DevExpress9.2完整版

    DevExpress.Wpf.Bars.v9.2.dll.VisualStudio.De DevExpress.Wpf.Bars.v9.2.Expression.Design.d DevExpress.Wpf.Bars.v9.2.VisualStudio.Design DevExpress.Wpf.Bars.v9.2.xml DevExpress.Wpf.Carousel....

    DotNetBar.for.WPF.v5.9.0.0 crack

    DotNetBar.for.WPF.v5.9.0.0-AHCU

Global site tag (gtag.js) - Google Analytics