【WPF学习】第三章 使用其他名称空间中的类型

    前面已经介绍了如何在XAML中使用WPF中的类来创建基本的用户界面。但XAML是实例化.NET对象的通用方法,包括那些位于其他非WPF名称空间以及自己创建的名称空间中的对象。

  创建那些不是用于在XAML窗口中显示的对象听起来像是多余的,但在很多情况下这是需要的。一个例子是,但使用数据绑定并希望在某个控件上显示从其他对象提取的信息时。另外一个例子是希望使用非WPF对象为WPF对象设置属性时。

  例如,可使用数据对象填充WPF的ListBox控件。ListBox控件将调用ToString()方法来获取文本,以便在列表中显示每个条目。

  为使用未在WPF名称空间中定义的类。需要将.NET名称空间映射到XML名称空间。XAML有一种特殊的语法可用于完成这一工作,该语法如下所示:

  xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName"

  通常,在XAML文档的根元素中,在紧随声明WPF和XAML名称空间的特性之后放置这个名称空间。还需要使用适当的信息填充三个斜体部分,这三部分的含义如下:

  • Prefix是希望在XAML标记中用于指示名称空间的XML前缀。例如,XAML语法使用x前缀。
  • Namespace是完全限定的.NET名称空间的名称。
  • AssemblyName是声明类型的程序集,没有.dll扩张名。这个程序集必须在项目中引用。如果希望使用项目程序集,可以忽略这一部分。

  例如,下面的标记演示了如何范围System名称空间中的基本类型,并将其映射为前缀sys:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

  现在,为了创建其中一个名称空间中的类的实例,可使用名称空间前缀:

<sys:DateTime>2019-12-30 12:20:00</sys:DateTime>

  理想情况是,希望在XAML中使用的每个类都有无参构造函数。如果具有无参构造函数,XAML解析器就可创建对应的对象,设置其属性,并关联所提供的任何事件处理程序。XAML不支持有参构造函数,而且WPF中的所有元素都包含无参构造函数。此外,需要能够使用公共属性设置所期望的所有细节。XAML不允许设置公共字段或调用方法。

  如果想要使用的类没有无参构造函数,就有一些限制。如果试图创建简单的基本类型(如字符串、日期或数字类型),可提供数据的字符串表示形式作为标签中的内容。XAML解析器接着将使用类型转换器将字符串转换为合适的对象。如上面代码段所示,例举了一个使用DateTime结构的例子。

  因为DateTime类使用TypeConverter特性将自身关联到DateTimeConverter类,所以上面的标记可以凑效。DateTimeConverter类知道这个字符串是合法的DateTime对象,并对其进行转换。当使用该技术时,不能使用特性为对象设置任何属性。

  下面示例将所有这些概念融合在一起。将sys前缀映射到System名称空间,并使用System名称空间创建三个DateTime对象,然后用这三个DateTime对象填充一个列表:

<Window x:Class="WpfApplication1.DateTimeWindow"
        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="DateTimeWindow" Height="300" Width="300">
    <ListBox>
        <ListBoxItem>
            <sys:DateTime>2019-12-30 12:20:00</sys:DateTime>
        </ListBoxItem>
        <ListBoxItem>
            <sys:DateTime>2019-12-31 12:20:00</sys:DateTime>
        </ListBoxItem>
        <ListBoxItem>
            <sys:DateTime>2019-12-3 12:20:00</sys:DateTime>
        </ListBoxItem>
    </ListBox>
</Window>

原文地址:https://www.cnblogs.com/Peter-Luo/p/12147286.html

时间: 2024-10-25 06:51:29

【WPF学习】第三章 使用其他名称空间中的类型的相关文章

oracle学习 第三章 常用的SQL*PLUS命令 ——02

今天接着昨天的RUN命令继续讲. 3.5 n(设置当前行)命令和A(PPEND)(附加)命令 设想,你输入了例3-10的查询语句 例 3-10 SQL> SELECT ename 2 FROM emp; 例 3-10 结果 看到以上输出时,您发现在SELECT子句中忘了job,sal.这时您又如何修改您的SELECT子句呢?首先您应该使用SQL*PLUS的L(LIST)命令来显示SQL缓冲中的内容. 例 3-11 SQL> L 例 3-11 结果 在例3-11显示的结果中,2后面的"

安卓学习——第三章

安卓学习——第三章 由于自身的实力不足,经过尝试后放弃了自己编写记账本app,而是打算找到合适的相关项目进行学习.我找到了几个AndroidStudio项目,我在AndroidStudio里面直接打开文件,发现无法运行.想到应该是import项目才行(我可真是菜的真实). 通过import这些项目之后,发现其中一个项目竟然是可以跑起来的.我便将项目通过手机进行测试,发现在手机上也是可以运行的.不过有一些在外观上的问题. 首先是在手机上的显示,会有一部分文字内容是乱码.我便去找编译器里面相关文件的

【WPF学习】第一章 XAML介绍

XAML(Extensible Application Markup Language的简写,发音为“zammel”)是用于实例化.NET对象的标记语言.尽管XAML是一种应用于诸多不同问题领域的技术,但其主要作用是构造WPF用户界面.换言之,XAML文档定义了在WPF应用程序中组成窗口的面板.按钮以及各种空间的布局. 一.XAML变体 实际上术语“XAML”有多种含义.到目前为止,我们使用XAML标识整个XAML语言,它是一种基于通用XML语法.专门用于表示一颗.NET对象树的语言(这些对象可

Struts2框架学习第三章——Struts2基础

本章要点 —  Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 —  WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合Tomcat — 使用Eclipse开发Web应用 — 为Web应用增加Struts 2支持 —  Struts 2框架的MVC组件 —  Struts 2框架的流程 — 通过web.xml文件加载Struts 2框架 — 通过struts.properties文件配置Struts 2属性 —  str

汇编学习第三章

在第三章的学习中,我们开始更深入地学习寄存器. (一)字在内存中的存储与内存单元地址   在第二章中,我们了解到,在CPU中,用16位寄存器来存储一个字,但是由于内存单元是字节单元(即在一个单元内只能存放一个字节),所以一个字要用两个内存单元来存放.举个例子,我们用0.1两个单元来存放数据4E20H,0号单元为低地址单元,1号为高地址单元单元,分别存放它的低位.高位数据.由此,我们提出字单元的概念:由两个地址连续的内存单元组成,用来存放一个16位数据的内存单元.,一般我们将起始地址为N的字单元简

【WPF学习笔记三】空WPF项目元素详解

我们在VisualStudio2010创建了一个空WPF程序,现在我们来对这个空WPF程序的所有元素进行讲解! 1.<Window x:Class="WpfApplication1.MainWindow" 2.        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3.        xmlns:x="http://schemas.microsoft.com/

LinQ In Action 学习第三章

本章开始前先回顾一个小例子,复习一下第二章所讲内容 var pc = Process.GetProcesses()                .Where(p => p.WorkingSet64 >= 20 * 1024 * 1024) // lamador expression                .OrderByDescending(p => p.WorkingSet64)// extension method                .Select(p =>

WPF学习(三) - 依赖属性和附加属性

学习WPF时,我在看一本叫做“深入浅出WPF”的书.整整20页都在讲依赖性性和附加属性,反复看了几遍居然还是不懂,真是郁闷. 上一篇中WPF绑定的例子,其实已经用到了依赖属性. // 作为被绑定的目标类,必须从DependencyObject派生 // 这样定义的类才能满足SetBinding方法的第一个参数的类型要求 // 还要额外定义一个依赖属性,用来满足SetBinding方法的第二个参数要求 // 用DependencyObject派生方法GetValue和SetValue,控制属性的存

java学习第三章1.注释,标示符和关键字

3.1 注释. 注释的作用:1.方便后期自己阅读时明白当时的思路. 2.在团队开发中,方便他人理解自己写的代码 注释的种类:1.单行注释:“//"开头,其后的所有内容都被注释掉.单行注释还可以用来检查代码调试程序 2.多行注释用"/*"开头, "*/"结尾.中间部分既是注释的部分.可以注释多行代码. public class Commenttest { /*这是多行注释,这一行以及下面一行.学习java是个艰苦的过程 现在万家灯火,团员圆满的日子里我还在这