随笔分类 - 个人文章
摘要:上午,有位初学者朋友问:如何比较两个字节数组中各字节是否相等?不许笑,我一向反对嘲笑初学者,初学者不认真学习时你可以批评,但不能讥嘲。你不妨想想,你自己开始学习编程的时候又是什么个光景?好,于是,这位初学者朋友就做了以下尝试: byte[] buffer1 = { 0x001, 0x002, 0x003 }; byte[] buffer2 = { 0x001, 0x002, 0x003 }; Console.WriteLine(buffer1 == buffer2);想一下,这个方法行吗?结果一运行,这位朋友差点晕倒,呵呵。bu...
阅读全文
摘要:以前在CSDN的博客上写过一些,貌似在这里没写过。一般情况下我是比较欣赏做得比较差的招聘信息,为什么呢?很简单,从一个公司发布的招聘信息,就可以得知这家公司是什么水平了。越是皮包公司,其发布的招聘信息就越丢人。现在正是大家找工作的时候,不信的话,大家不妨多留心留心。以下都是我选出来的典型,我也不加以评定,大家看了,自己心中有数。大家在看到一则招聘信息时,不妨拿来跟我下面列的来比一下,如果情况和以下的信息相近,那你就知道这家公司是什么货色了。想一想,一个组织,一个企业,连外头的体面都做不好的,里头肯定是不成体统的,我倒想问了,哪个公司不死要面子的?
阅读全文
摘要:控件我已经弄好了,代码比较多,所以没办法全面介绍。一开始我是直接继承Selector类来实现,做是做出来了,不过发现性能不太好。于是,我就想着自己来实现。毕竟我是做给自己用的,也不考虑过多的东西,也不像专业控件那样进行复杂封装和样式通用处理。1、实现在文本框的文本更改时(输入内容)弹出下拉列表,以供选择;2、下拉列表中的项会根据文本框已输入的内容,显示两种颜色。如果下拉列表中的项的文本里面存在文本框中输入的字符,则显示为另外的颜色;3、当下拉列表中的项被点击时,就把项中的文本赋值给文本框。先上几个图,大家看看。DropdownTextBox类表示带下拉列表的文本框控件,输入框是一个TextBo
阅读全文
摘要:今天早上,随感而发,随便写了点东西。结果下午的时候看了看评论,吓我一跳。估计是不是写代码的人看散文看得太少了,还是因为现在的人读的书太少了,似乎有有些大惊小怪。关于Y美女,我声明一下,尽管她很脱俗,不过情缘自有分定,我心里所爱的并不是Y美女,而是另外一位女孩子,境界也跟Y差不多。这样的女孩其实我遇过好几个个,要说喜欢,这几位林黛玉式的女孩我都比较喜欢,但是,爱和喜欢是两回事。看来,以后这些高级文章还是写到新浪博客好了,这个博客专用来写编程相关的。------------------------------------------闲言少叙,说正经话。本文就说一说嵌套数组,估计又有人不满了,你也许
阅读全文
摘要:如何理解元数我们可以把元数据理解为随类型一起导出的附加信息。有时候我们会考虑,把元数据随类型一并导出,增加一些说明,使得我们在导入的时候,可以多一些筛选条件。默认的类型导出带有元数据吗上面的内容我说得比较简洁,也许您不是很理解,不要紧,在编程里面,很多东西我们都是写了代码后才理解的。所以,我的理论功底比较差,最不擅长的就是长篇大论,还是从代码中看吧。我们首先要弄清楚一下问题:在我没有手动去添加元数据的默认导出类型,是否带有元数据。为了使代码更简单,这里我直接把一个类导出,而不编写公共接口了。这里我们直接编写一个类,然后直接导入这个类型即可:示例代码定在当前程序集中,可以在AssemblyCat
阅读全文
摘要:上一文中,我们大致明白了,利用MEF框架实现自动扫描并组装扩展组件的思路。本文我们继续前进,从最初的定义公共接口开始,一步步学会如何使用MEF。在上一文中我们知道,对于每一个实现了公共规范的扩展组件,都需要进行导出,随后我们的主应用程序文件中会自动进行组装。这便产生了一个疑问:为什么需要导出?如果大家还记得,以前我们用VC++写.dll文件时,都会把需要提供给别人调用的函数标记为导出函数,这样别人才能调用我们编写的函数。就好比我们的家,我们一般会有客厅,既然叫客厅,当然是展现给客人看的。有客人来了,我们会在客厅接待,当然我们不愿意让客人进入我们的卧室,那是较为隐私的地方。因此,对于我们编写的扩
阅读全文
摘要:在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序。这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而对于像ERP系统那样复杂而且常常需要扩展的应用程序,这种扩展方法就不够方便,因为每次都要修改源代码或重新引用组件。尤其是组件(许多dll),如果每编写一个新组件又要在主项目中引用一次,显然主项目就不得不经常重新生成。要是能有一种机制,可以在主项目应用程序不作任何修改就可以自动识别并扩展组件,就会很便捷,我们每次扩展只需要更新或者添加某些dll文件即可。MEF正是为了解决上述问题而诞生。MEF全称M
阅读全文
摘要:启动器与选择器简单的地方在于,它们的使用方法几乎一模一样,从前面几节中,我相信大家基本上都知道如何使用它们了。 这里还是哆嗦一下吧,使用启动器和选择器的步骤如下: 1、实例化,new一个; 2、准备各参数,对相关的属性赋值; 3、Show; 4、对于启动器,不需要这步,但选择器有返回数据,所以需要处理完成事件。本节再举两例子,启动器和选择器就可以完成了,然后我们下一节开始,探讨新的知识点。例一:媒体播放器。这是一个启动器,用起来更方便。 主要属性有: Controls——要显示控制按钮,如暂集,停止等,它是一个带了Flags特性标记的枚举,所以可以多个值合并,如MediaPlaybackCon
阅读全文
摘要:从名字上就看出来,这个家伙就是打开浏览并浏览到指定页面。它有两个用途完全一样的属性:Uri属性是System.Uri类型,这是新写进的属性;URL是字符串类型,但如果使用该属性,会发出警告“已过时”,所以建议使用前者。下面这个例子,点击按钮后都是打开WEB浏览器并定位到文本框中输入的地址,但分别用了上面所说的两个属性,当程序运行后,你会发现其效果是一样的。<phone:PhoneApplicationPage x:Class="WebTask.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/x
阅读全文
摘要:本节我们通过一个简单的发送短信示例来演示一下如果配合使用PhoneNumberChooserTask和SmsComposeTask类。PhoneNumberChooserTask是选择器,它用于从你的电话簿里选择你要发送短信的电话号码;SmsComposeTask就是用来启动发送短信组件并显示发送窗口。注意,这些操作都在用户的操控之中,发送短信一定会显示可视化页面的,而且不会偷偷地在后台发送,因为Windows phone是以用户体验和安全为原则的,后台发送是不允许的,而且发送过程是由用户控制的,你可以选择取消或退出。SmsComposeTask类的To属性就是目标电话号码,Body就是你要发
阅读全文
摘要:这两个组件都属于选择器,而且它们也有很多相似的地方,最明显的上一点,它们都是用来选择图片。一、CameraCaptureTask选择器。它用于启动照相机,当你拍下照片后,自动把照的字节流返回给调用方应用程序。前文说过,启动器和选择的使用方法和步骤都是一样的。对于CameraCaptureTask组件也如此,不过注意的一点是,处理Completed事件时一定要记住,尽可能的使用页面类的Dispatcher.BeginInvoke方法,因为异步回调直接访问UI元素是不安全的,极有可能会引发异常,但我不是说绝对。 <Grid> <Grid.RowDefinitions> ..
阅读全文
摘要:从今天开发始,我们又开始新的征程,接下来的课程我们要熟悉一下启动器和选择器,其实二者是一样的,没有根本的区别,启动器是有返回结果的,如打开搜索应用程序进行搜索,而选择器是有返回内容的,如选择一张照片。那么,启动器和选择器是啥玩意儿呢?其实我们可以很简单去理解,说白了,就是使用系自带的组件或应用程序。对的,就是这样,我说过,有时候很多概念只是名字上吓人罢了,实际用起来是非常简单的,比如这个启动器和选择器就是了。到底是不是很简单,实践一下就知道了,本系列教程叫“轻松入门”,既然称得上是轻松,痛苦的事情不会叫大家去做,而MS一向注重用户体验,不会让大家痛苦的。先来总结一下,使用启动器和选择器的方法是
阅读全文
摘要:其实我们今天要说的就是一个控件——InkPresenter,这个控件并不是十分强大,没办法和WPF中的InkCanvas相比,估计在实际开发中也很少可能会用到它,不过,我们还是来了解一下吧,毕竟用起来也不难。使用该控件没有什么技术含量,注意一下以下几点就是了:1、必须明确指定InkPresenter的宽度和高度,也就是不能使用自动值和Margin,不然不能收集墨迹,除非里面有子元素;2、要收集墨迹,要设置Clip属性;3、可以使用DrawingAttributes类设置墨迹的大小和颜色。该控件不能像WPF那样自动实现收集墨迹的功能,也就是说只能是我们自己写代码了。 <Grid> .
阅读全文
摘要:前面说的那么多控件都是“静态”的,都是“哑吧”的,今天,你有没有兴趣研究一下,既能“有声有色”又操作简单的控件吗?如果有,请随我来。MediaElement播放多媒体文件。首先,隆重介绍一下MediaElement,为什么要隆重呢?因为它简单,真的,你一定会玩的,但是,MediaElement功能强大,它可以播放音频和视频,只要支持的格式就行了。要设置播放的音频或视频文件,你只需要设置Source属性即可,它其实就是一个URI,如果要播放你项目中的媒体文件,你先要把媒体文件添加到你的项目中,把它的生成操作设置为资源,不用我说了,都会了吧。你一定会问,能播放网络的URI指向的媒体文件吗?呵,你试
阅读全文
摘要:三维效果也可以叫透视效果,所以,我干脆叫三维透视效果。理论知识少讲,直接用例开场吧,因为这个三维效果其实很简单,比上一节中的变换更省事,不信?一起来做一做练习吧。练习一:把对象沿Y轴旋转45度。默认情况下,旋转中心都是在中心位置上,如Y轴中心。而至于旋转的角度,哪个方向是正值,哪个方向是负值,嘿,你自己动手试一下就知道了,我相信你能理解的,不然,Hello Kitty嘲笑你的。好的,由于是第一个练习,我们先来说说X、Y、Z三个坐标轴到底在哪,X轴不用说了,就横着放的那个了,Y轴呢,当然是竖着的,那Z轴呢?你猜?知道这三个轴是互相垂直的,你会猜的,在哪?在图上看不到?为什么呢?是啊,Z轴正指向你
阅读全文
摘要:变换不是一个好理解的概念,不是吓你,它涉及很多有关代数,几何,以及线性代数的知识。怎么?被我的话吓怕了?不用怕,尽管我们未必能够理解这些概念,只要我们知道怎么使用它们就是了。其实,变换就是平面上一种坐标变化,听起来很抽象,但,只要我把它说具体了,你就会觉得不抽象了。相信各位如果玩过Photoshop,或者其它的绘图软件,应该知道什么叫做旋转,什么叫做倾斜,什么叫做平移……是的,这些就是我们今天要聊的变换,好了,现在你是不是可以坐下来喝一杯珍珠奶茶来放松一下呢?哦,对了,珍珠奶茶尽量少喝哦。好,闲话少吹,开始今天的表演。一、TranslateTransform。这个应该算是最好理解了,就是平移嘛
阅读全文
摘要:前面在讲述导航的知识,也讲了控件,也讲了资源,样式,模板,相信大家对UI部分的内容应该有了很直观的认识了。那么今天讲什么呢?不知道大家在练习导航的时候是否发现一个问题?当我们向页面传递一个参数的时候,是没问题的,但是,如果我们在XAML中使用这样的URI时,你敢保证它还能正常运行呢? /PageaTest.xaml?name=小强&age=100你发现,嘿,咋回事了?怎么报错了?不知道有没有去思考,为什么呢?好,先问你一句,你学过Web开发吗?或者说,了解HTML吗?如果你了解,好,你已经找到答案了。哈哈,对了,就是编码和转义的问题,“&”符号用在XAML中同样需要转义,但你一
阅读全文
摘要:在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的一种可重用的属性设置列表,这样对于需要设置相同属性值的同类型的多个控件来讲是大大提高效率,我们不必要为每个控件做重复的动作。下面是一个TextBox的样式示例,我们希望通过引用资源中的样式,使得页面上的所有TextBox控件都具有统一的外观,而且都只能输入数字。 <phone:PhoneApplicationPage.Resources> <!--不带key的样式,应用于所有TextBlock元素--> <Style T...
阅读全文
摘要:活字印刷术是我国“四大发明”之一,毕昇在发明活字印刷术之后,他很快发现一个问题,随着要印刷资料的不断增加,要用到的汉字数目越来越多,于是,他必须寻找一种有效的办法去管理那些刻有汉字的立方体(暂且就叫立方体,其实的确是个立方体),所以,他就和助手们一起努力,为这些立方体进行记录,有标识地放好,在印刷过程中用到哪些字,就直接取出来,不用了就放回去,既环保又方便。这就是资源,水、空气、阳光也是资源,煤、铁矿物也是资源,只不过有些可再生,有些不可再生罢了。何为资源?资源就是客观存在的,当我们需要时可以拿来利用的一切可支配或可重新组合的东西,如人力资源、人脉资源等。如果做过网页,应该了解CSS是用来干啥
阅读全文
摘要:数据模板,如果你仅仅听到这个名词,你一定很迷惑,什么来的?用来干什么的?不急,亲,今天,我们一起来探索一下吧。用白话文说,数据模板就是用来规范数据的显示方式的,关于模板,估计各位不陌生的,大家应该玩过PPT吧,都做过演示文稿吧,对啊,PPT里面有很多模板的,明白了吧?不明白?那你一定填过表吧,如果报考什么考试的,你肯定会被要求填一些什么报名表之类的,或者说,找过工用吗?是啊,做简历也有简历模板。模板的用法就像做填空题,有了部分规范的内容,然后你按照这个规范,在特定的位置填上恰当的内容,你总不能说把你的姓名填到“性别”那里去吧,这就不符合规范了。好了,废话讲了不少,下面进入正题,你想想,哪些控件
阅读全文