Sunday, May 6, 2012

csharp

浏览:Silverlight

 
 

 
 

Aspx

2012年5月4日

22:32

 
 

错误处理

2012年5月4日

22:32

 
 

Parser Error Message: Could not load type

在IIS中将该 路径添加到虚拟路径中

 
 

拒绝访问。 (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

 
 

Exception Details: System.UnauthorizedAccessException: 拒绝访问。 (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

 
 

源文档 <http://blog.pkrss.com/testaspxspeak/Default.aspx?text=123>

 
 

 
 

 
 

Web.config

2012年4月29日

20:00

 
 

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

 
 

// 这边可以这样使用 Uri baseAddress = new Uri(ConfigurationManager.AppSettings["BaseURI"]);

<appSettings>

<add key="BaseURI" value="http://localhost:8088/Trivia"/>

<add key="QuestionLoadDelay" value="4000"/>

<add key="QuestionTime" value="11000"/>

</appSettings>

 
 

<system.serviceModel>

<services>

<service name="Trivia.Server.GameServer" behaviorConfiguration="MyServiceTypeBehaviors">

<endpoint address="http://localhost:8088/Trivia"

binding="wsDualHttpBinding"

contract="Trivia.Common.ITrivia" />

                 <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />

</service>

</services>

<behaviors>

<serviceBehaviors>

<behavior name="MyServiceTypeBehaviors" >

<serviceMetadata httpGetEnabled="true" />

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

</configuration>

 
 

Mysql

2012年4月13日

20:50

 
 

 vs2010 wcf里面怎么连接mysql数据库,求解 [复制链接]

 
 

源文档 <http://www.cwinphone.com/forum.php?mod=viewthread&tid=144&extra=page%3D1>

 
 

 
 

linq

2012年3月22日

13:43

 
 

示例

2012年3月22日

13:43

 
 

101 LINQ Samples

 
 

源文档 <http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b>

 
 

50开始,50:Skip(50).Take(50)

 
 

select selectmany的示例:

class Bouquet
{
public List<string> Flowers { get; set; }
}

static
void SelectVsSelectMany()
{
List<Bouquet> bouquets = new List<Bouquet>() {
new Bouquet { Flowers = new List<string> { "sunflower", "daisy", "daffodil", "larkspur" }},
new Bouquet{ Flowers = new List<string> { "tulip", "rose", "orchid" }},
new Bouquet{ Flowers = new List<string> { "gladiolis", "lily", "snapdragon", "aster", "protea" }},
new Bouquet{ Flowers = new List<string> { "larkspur", "lilac", "iris", "dahlia" }}
};

// *********** Select ***********
IEnumerable<List<string>> query1 = bouquets.Select(bq => bq.Flowers);

// ********* SelectMany *********
IEnumerable<string> query2 = bouquets.SelectMany(bq => bq.Flowers);

Console.WriteLine("Results by using Select():");
// Note the extra foreach loop here.
foreach (IEnumerable<String> collection in query1)
foreach (string item in collection)
Console.WriteLine(item);

Console.WriteLine("\nResults by using SelectMany():");
foreach (string item in query2)
Console.WriteLine(item);

/* This code produces the following output:

Results by using Select():
sunflower
daisy
daffodil
larkspur
tulip
rose
orchid
gladiolis
lily
snapdragon
aster
protea
larkspur
lilac
iris
dahlia

Results by using SelectMany():
sunflower
daisy
daffodil
larkspur
tulip
rose
orchid
gladiolis
lily
snapdragon
aster
protea
larkspur
lilac
iris
dahlia
*/

}

 
 

源文档 <http://msdn.microsoft.com/zh-cn/library/bb546168.aspx>

 
 

 
 

 
 

sqlite

2012年3月21日

16:15

 
 

中文匹配

2012年3月21日

16:15

 
 

直接查找中文,不行:

cmd.CommandText = string.Format("SELECT content,flag FROM selfgroup WHERE TITLE = '{0}'", Name);

 
 

要改为参数的形式:

IDbCommand cmd = dbcon.CreateCommand();

 
 

cmd.CommandText = "SELECT content,flag FROM selfgroup WHERE TITLE = @file";

cmd.Parameters.Add(new SqliteParameter() { ParameterName = "@file", Value = Name });

 
 

IDataReader reader = cmd.ExecuteReader();

if(reader.Read())

{

_StockList.AddRange(reader.GetString(reader.GetOrdinal("content")).Split(','));

CanModify = (reader.GetInt32(reader.GetOrdinal("flag")) & 0x1) != 0 ? true:false;

}

 
 

wcf

2012年3月16日

17:25

 
 

Silverlgiht 不支持wsDualHttpBinding

支持netTcpBind 但是要建一个Host.exe程序

同时,启动跨域脚本.

 
 

错误

2012年4月30日

22:25

 
 

1:找不到具有绑定 NetTcpBinding 的终结点的与方案 net.tcp 匹配的基址。注册的基址方案是 [http]

 
 

源文档 <http://localhost:52878/RoomHallService.svc>

 win2003系统不支持  net.tcp ,所以要删除配置文件中所有与netTcp 绑定的配置项

 
 

<endpoint address=""

                  binding="netTcpBinding" bindingConfiguration="netTCPBindings"

                  contract="" />

        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />

 
 

源文档 <http://blog.csdn.net/lifeng_beijing/article/details/4022521>

改成

<endpoint address="" binding="wsDualHttpBinding" bindingConfiguration="BeeHiveServer.RoomHallService.wsDualHttpBinding0" contract="BeeHiveServer.IRoomHallService" />

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

 
 

 
 

2:

ServiceModel客户端配置中找不到应用协定的默认终结点元素。

 
 

源文档 <http://www.cnblogs.com/shunliy/archive/2010/02/22/1402458.html>

我的处理:重新更新客户端的service reference

 
 

 
 

取客户端IP端口

2012年4月29日

16:29

 
 

在WCF服务中获取客户端的IP地址和端口号

 
 

源文档 <http://blog.csdn.net/tingsking18/article/details/4488447>

 
 

 
 

namespace BeeHive.Web.Services

{

using System;

using System.Collections.Generic;

using System.ComponentModel.DataAnnotations;

using System.ServiceModel.DomainServices.Hosting;

using System.ServiceModel.DomainServices.Server;

using System.Web.Profile;

using System.Web.Security;

 
 

using System.ServiceModel;

using System.ServiceModel.Channels;

 
 

/// <summary>

/// RIA Services Domain Service that exposes methods for performing user

/// access.

/// </summary>

[EnableClientAccess]

public class RoomHallService : DomainService

{

bool Login()

{

//提供方法执行的上下文环境

OperationContext context = OperationContext.Current;

//获取传进的消息属性

MessageProperties properties = context.IncomingMessageProperties;

//获取消息发送的远程终结点IP和端口

RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;

Console.WriteLine(string.Format("Hello {0},You are from {1}:{2}", value, endpoint.Address, endpoint.Port));

return string.Format("Hello {0},You are from {1}:{2}", value, endpoint.Address, endpoint.Port);

 
 

}

}

}

 
 

 
 

Entity

2012年4月29日

11:35

 
 

 
 

 
 

 
 

Visual Studio 2010 帮助->示例->CSharpSamples.zip->CSharpSamples\DataSamples\WCF Data Services

使用实体框架在客户端使用Wcf查询数据库

 
 

ADO.NET 实体数据模型工具

 
 

源文档 <http://msdn.microsoft.com/zh-cn/library/bb399249.aspx>

.edmx 文件概述(实体框架)

 
 

源文档 <http://msdn.microsoft.com/zh-cn/library/cc982042.aspx>

 
 

 
 

我的教程

2012年4月21日

22:41

 
 

1.共享文件

在wcf server的Models/shared/xxx.shared.cs 会拷贝到引用wcf的client工程Gererator Codes/下

比如以下文件:

[ServiceContract(CallbackContract = typeof(IRoomHallCallback))]

public interface IRoomHallService

{

[OperationContract(IsOneWay = true)]

void NotifyCurrentUserIdRunning();

 
 

/// <summary>

/// Login in the room

/// 1.如果大厅中当前无用户,启动检查用户是否在线的任务.

/// </summary>

/// <param name="userNickName">user nick name</param>

[OperationContract(IsOneWay = true)]

void LoginHall(string userNickName);

 
 

/// <summary>

/// 退出

/// 1.从大厅中移除

/// 2.从房间中移除

/// 3.如果是房间主,删除房间(告诉其它人,关闭房间)

/// 4.如果大厅中无其它用户,关闭检查用户是否在线任务.

/// </summary>

[OperationContract(IsOneWay = true)]

void LoginOut();

}

 
 

生成代码文件:

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\svcutil.exe" /language:cs /out:ServerProxy.cs http://localhost:28167/PkBeeHive/metadata

你可以将V7.0A改成其它的

 
 

将生成的文件添加到工程中:

ServerProxy.cs

output.config

 
 

ServiceModel 元数据实用工具 (Svcutil.exe)

 
 

源文档 <http://technet.microsoft.com/zh-cn/library/aa347733(v=VS.110)>

 
 

 
 

  1. 连接mysql(不用)

 
 

准备工作:

安装mysql, 和.net mysql的相关sdk

 
 

1.打开Visual Studio 2010,文件-> 新建->项目

选择Visual c# -> silverlight -> silverlight业务应用程序,名字随便填,我填BeeHive

2.编译,运行.

发现:点击登陆,会提交登陆校验的相关信息,但是无法完成注册与登陆.因为没有使用ms sql数据库.

注意:BeeHive工程/Web/Resource/下面的几个文件为链接.(关于链接的创建方式为:右键->添加->添加现有项,选择你要添加的文件,注意添加按钮右边的下拉箭头,选:添加为快捷方式)

心得:如果一个未开启Wcf的siverlight的项目,要使用wcf项目时,只要在工程,属性->Silverlight,最下面,WCF RIA服务链接,选择你要链接的wcf项目即可.

笔记:(可能无用) http://msftdbprodsamples.codeplex.com/ 下载数据库示例

 
 

2.修改为mysql连接字符串:

2.1.修改:BeeHive.Web\Web.config文件(注意不是什么Web.debug.config)

<connectionStrings>


<clear/>

<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />


<remove name="LocalMySqlServer"/>

<add name="LocalMySqlServer" connectionString="server=localhost;User Id=root;Persist Security Info=True;database=app_pkrss" providerName="MySql.Data.MySqlClients" />

</connectionStrings>

 
 

<system.web>

<httpModules>

<add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

</httpModules>

<compilation debug="true" targetFramework="4.0" />

<globalization culture="auto" uiCulture="auto" />

 
 

<authentication mode="Forms">

<forms name=".BeeHive_ASPXAUTH" timeout="2880" />

</authentication>

 
 

<membership defaultProvider="MySQLMembershipProvider">

<providers>

<clear />

<add connectionStringName="ApplicationServices" enablePasswordRetrieval="false"

enablePasswordReset="true" requiresQuestionAndAnswer="false"

requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6"

minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"

applicationName="/" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" />


<add autogenerateschema="true" connectionStringName="LocalMySqlServer"

enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true"

applicationName="/" requiresUniqueEmail="false" passwordFormat="Clear"

maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7"

minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"

passwordStrengthRegularExpression="" name="MySQLMembershipProvider"

type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

</providers>

</membership>

 
 

<roleManager enabled="true" defaultProvider="MySQLRoleProvider">

<providers>

<clear />

<add connectionStringName="ApplicationServices" applicationName="/"

name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />

<add applicationName="/" name="AspNetWindowsTokenRoleProvider"

type="System.Web.Security.WindowsTokenRoleProvider" />


<add connectionStringName="LocalMySqlServer" applicationName="/"

name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

</providers>

</roleManager>

 
 

<profile>

<providers>

<clear/>

<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>


<add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" />

</providers>

<properties>

<add name="FriendlyName" type="string" allowAnonymous="true" serializeAs="String"/>


<add name="Height" type="int" allowAnonymous="true" serializeAs="String"/>

<add name="Weight" type="int" allowAnonymous="true" serializeAs="Xml"/>

<add name="Perfil" type="string" allowAnonymous="false" defaultValue="" serializeAs="String"/>

</properties>

</profile>

2.2.打开Asp.net 网站管理工具(项目 > ASP.NET 配置),在"提供程序"页面选择"为每项功能选择不同的提供程序(高级)",接下来在"成员资格提供程序"中选择MySQLMembershipProvider ,在"角色提供程序"中选择MySQLRoleProvider 。

 
 

 
 

参考:

MySqlRoleProvider, MySqlMembershipProvider, MySqlProfileProvider, MySql Connector .NET 5.2.3

 
 

源文档 <http://social.msdn.microsoft.com/Forums/zh-CN/aspnetpt/thread/94e73a67-27a7-4229-a59b-2179efafad81>

 
 

 
 

创建和管理角色

 
 

源文档 <http://msdn.microsoft.com/zh-cn/dd458748>

asp.net中通过ALinq让Mysql操作变得如此简单

 
 

源文档 <http://www.jb51.net/article/27627.htm>

ASP.NET2.0 MemberShip RoleManager详解及配置

 
 

源文档 <http://blog.csdn.net/yymimang/article/details/5010400>

 
 

Membership and Role providers for MySQL

 
 

源文档 <http://www.codeproject.com/Articles/12301/Membership-and-Role-providers-for-MySQL>

 
 

Asp.net中利用Mysql进行验证

 
 

源文档 <http://www.cnblogs.com/kean/articles/1828991.html>

 
 

 
 

 
 

 
 

 
 

 
 

 
 

教程

2012年3月16日

17:25

 
 

《我的WCF之旅》博文系列汇总

 
 

源文档 <http://www.cnblogs.com/artech/archive/2007/09/15/893838.html>


YeahTrivia: Creating a Trivia Server/Client with WPF and WCF

 
 

源文档 <http://channel9.msdn.com/coding4fun/articles/YeahTrivia-Creating-a-Trivia-ServerClient-with-WPF-and-WCF>

Silverlight 访问WCF服务

 
 

源文档 <http://www.cnblogs.com/Memory/archive/2010/03/06/1679683.html>

 
 

Pub/sub sample using HTTP polling duplex WCF channel in Microsoft Silverlight 3

 
 

源文档 <http://tomasz.janczuk.org/2009/07/pubsub-sample-using-http-polling-duplex.html>

 
 

Silverlight4中用net.tcp双工方式进行通信

 
 

源文档 <http://www.cnblogs.com/homezzm/archive/2009/12/17/1626264.html>

 
 

 
 

 
 

 
 

 
 

 
 

lib prism

2012年3月9日

16:36

 
 

其本介绍

 
 

1.IEventAggrigate

 
 

事件类别:

CompositePresentationEvent : EventBase

 
 

1.1 申明事件返回值

internal class EventArgs_BSvrComRtStockByFilter

{

public bool result;

public ushort groupID;

public string[] data;

}

 
 

1.2 申明事件,其中CompositePresentationEvent为可以设定执行线程选项

/// <summary>

/// BSvrComRtStockByFilter 的返回事件.

/// </summary>

internal class Event_BSvrComRtStockByFilter : CompositePresentationEvent<EventArgs_BSvrComRtStockByFilter>

{

}

 
 

1.3 执行事件

ProgramBase.Instance.bootstrapper.Container

.Resolve<IEventAggregator>()

.GetEvent<Event_BSvrComRtStockByFilter>()

.Publish(new EventArgs_BSvrComRtStockByFilter()

{

groupID = _GroupID,

data = stockid

});

 
 

 
 

 
 

xaml

2012年3月9日

14:57

 
 

加载程序集外资源问题:

 
 

http://msdn.microsoft.com/en-us/ ... The_Pack_URI_Scheme

 
 

http://msdn.microsoft.com/en-us/library/aa970069(VS.85).aspx

 
 

源文档 <http://www.bbniu.com/forum.php?mod=viewthread&tid=50&extra=page%3D1&page=1&1>

 
 

wpf

2012年2月28日

11:03

 
 

Silverlight两Usercontrol使用Event通信演示

 
 

源文档 <http://www.silverlightchina.net/html/works/2010/0908/1861.html>

 
 

MVVM(Model-View-ViewModel)实例讲解

 
 

源文档 <http://www.dotnetdev.cn/2009/12/mvvm%EF%BC%88model-view-viewmodel%EF%BC%89%E5%AE%9E%E4%BE%8B%E8%AE%B2%E8%A7%A3/>

 
 

 
 

 
 

多线程

2012年3月31日

15:12

 
 

DependencyObject.Dispatcher

 
 

源文档 <http://msdn.microsoft.com/zh-cn/library/system.windows.dependencyobject.dispatcher(VS.95).aspx>

 
 

 
 

优化

2012年3月29日

14:47

 
 

Speeding up image loading in WPF using thumbnails

 
 

源文档 <http://blogs.msdn.com/b/dditweb/archive/2007/08/22/speeding-up-image-loading-in-wpf-using-thumbnails.aspx>

ListBox ItemsSource Load Time

 
 

源文档 <http://social.msdn.microsoft.com/Forums/en-AU/wpf/thread/9d24b0b9-6006-490c-ab75-900377a0c8d3>

 
 

Optimizing Performance: Data Binding

 
 

源文档 <http://msdn.microsoft.com/en-us/library/bb613546.aspx>

 
 

WPF性能校调

 
 

源文档 <http://www.cnblogs.com/yzlhccdec/articles/1114161.html>

 
 

 
 

 
 

闲话WPF之二六 (WPF性能优化点)

2012年3月29日

12:01

 
 

闲话WPF之二六(WPF性能优化点)

在建立漂亮UI的同时,我们还需要关注应用程序的性能,WPF尤其如此。下面从MS的文档中总结出了一些有用的性能优化点。在实际编写的过程中,可以参考。这个Post非完全原创,是根据一些文档总结出来的。

 
 

1、建立逻辑树的时候,尽量考虑从父结点到子结点的顺序构建。因为当逻辑树的一个结点发生变化时(比如添加或删除),它的父结点和所有的子结点都会激发Invalidation。我们应该避免不必要的Invalidation。

2、当我们在列表(比如ListBox)显示了一个CLR对象列表(比如List)时,如果想在修改List对象后,ListBox也动态的反映这种变化。此时,我们应该使用动态的ObservableCollection对象绑定。而不是直接的更新ItemSource。两者的区别在于直接更新ItemSource会使WPF抛弃ListBox已有的所有数据,然后全部重新从List加载。而使用ObservableCollection可以避免这种先全部删除再重载的过程,效率更高。

3、在使用数据绑定的过程中,如果绑定的数据源是一个CLR对象,属性也是一个CLR属性,那么在绑定的时候对象CLR对象所实现的机制不同,绑定的效率也不同。

A、数据源是一个CLR对象,属性也是一个CLR属性。对象通过TypeDescriptor/PropertyChanged模式实现通知功能。此时绑定引擎用TypeDescriptor来反射源对象。效率最低。

B、数据源是一个CLR对象,属性也是一个CLR属性。对象通过INotifyPropertyChanged实现通知功能。此时绑定引擎直接反射源对象。效率稍微提高。

C、数据源是一个DependencyObject,而且属性是一个DependencyProperty。此时不需要反射,直接绑定。效率最高。

4、访问CLR对象和CLR属性的效率会比访问DependencyObject/DependencyProperty高。注意这里指的是访问,不要和前面的绑定混淆了。但是,把属性注册为DependencyProperty会有很多的优点:比如继承、数据绑定和Style。所以有时候我们可以在实现DependencyProperty的时候,利用缓存机制来加速访问速度:看下面的缓存例子:

public static readonly DependencyProperty MagicStringProperty = 

    DependencyProperty.Register("MagicString", typeof(string), typeof(MyButton), new PropertyMetadata(new PropertyInvalidatedCallback(OnMagicStringPropertyInvalidated),new GetValueOverride(MagicStringGetValueCallback)));

 private static void OnMagicStringPropertyInvalidated(DependencyObject d)

  {

    // 将缓存的数据标识为无效

    ((MyButton)d)._magicStringValid = false;

  }

  private static object MagicStringGetValueCallback(DependencyObject d)

  {

    // 调用缓存的访问器来获取值

    return ((MyButton)d).MagicString;

  }

  // 私有的CLR访问器和本地缓存

  public string MagicString

  {

    get

    {

      // 在当前值无效时,获取最新的值保存起来

      if (!_magicStringValid)

      {

        _magicString = (string)GetValueBase(MagicStringProperty);

        _magicStringValid = true;

      }

      return _magicString;

    }

    set

    {

      SetValue(MagicStringProperty, value);

    }

  }

  private string _magicString;

  private bool _magicStringValid;

另外,因为注册的DependencyProperty在默认是不可继承的,如果需要继承特性,也会降低DependencyProperty值刷新的效率。注册DependencyProperty属性时,应该把DefaultValue传递给Register方法的参数来实现默认值的设置,而不是在构造函数中设置。

5、使用元素TextFlow和TextBlock时,如果不需要TextFlow的某些特性,就应该考虑使用TextBlock,因为它的效率更高。

6、在TextBlock中显式的使用Run命令比不使用Run命名的代码要高。

7、在TextFlow中使用UIElement(比如TextBlock)所需的代价要比使用TextElement(比如Run)的代价高。

8、把Label(标签)元素的ContentProperty和一个字符串(String)绑定的效率要比把字符串和TextBlock的Text属性绑定的效率低。因为Label在更新字符串是会丢弃原来的字符串,全部重新显示内容。

9、在TextBlock块使用HyperLinks时,把多个HyperLinks组合在一起效率会更高。看下面的两种写法,后一种效率高。

A、

<TextBlock Width="600" >

  <Hyperlink TextDecorations="None">MSN Home</Hyperlink>

</TextBlock>

<TextBlock Width="600" >

  <Hyperlink TextDecorations="None">My MSN</Hyperlink>

</TextBlock>

B、

<TextBlock Width="600" >

  <Hyperlink TextDecorations="None">MSN Home</Hyperlink>

  <Hyperlink TextDecorations="None">My MSN</Hyperlink>

</TextBlock>

10、任与上面TextDecorations有关,显示超链接的时候,尽量只在IsMouseOver为True的时候显示下划线,一直显示下划线的代码高很多。

11、在自定义控件,尽量不要在控件的ResourceDictionary定义资源,而应该放在Window或者Application级。因为放在控件中会使每个实例都保留一份资源的拷贝。

12、如果多个元素使用相同的Brush时,应该考虑在资源定义Brush,让他们共享一个Brush实例。

13、如果需要修改元素的Opacity属性,最后修改一个Brush的属性,然后用这个Brush来填充元素。因为直接修改元素的Opacity会迫使系统创建一个临时的Surface。

14、在系统中使用大型的3D Surface时,如果不需要Surface的HitTest功能,请关闭它。因为默认的HitTest会占用大量的CPU时间进行计算。UIElement有应该IsHitTestVisible属性可以用来关闭HitTest功能。

 
 

源文档 <http://www.cnblogs.com/YilingLai/archive/2007/01/19/624714.html>

 
 

xml

2012年3月9日

14:43

 
 

link to sql 解析xml比 xmlreader解析 快

 
 

<?xml version="1.0" encoding="utf-8" ?>

<Sprite

FullName="刀 狼"

ATK="250"

DEF="80"

>

<Frames>

<Frame ID="0-0-0" OffsetX="126" OffsetY="34" />

<Frame ID="0-0-1" OffsetX="126" OffsetY="33" />

</Frames>

</Sprite>

 
 

 
 

link to sql:

f (e.Stream != null) { Global.AddResInfo(key, XElement.Load(e.Stream)); }

//通过LINQ2XML解析配置文件

XElement info = Global.ResInfos[key].DescendantsAndSelf("Sprite").Single();

RealWidth = (double)info.Attribute("RealWidth");

FullName = info.Attribute("FullName").Value;

 
 

IEnumerable<XElement> iFrame = Global.ResInfos[key].Element("Frames").Elements();

frameOffset.Clear();

foreach (XElement element in iFrame) {

frameOffset.Add(element.Attribute("ID").Value, new Point2D() {

X = (int)element.Attribute("OffsetX"),

Y = (int)element.Attribute("OffsetY"),

});

}

 
 

cailburn框架教程

2012年3月3日

10:37

 
 

官方网站 http://caliburnmicro.codeplex.com/

 
 

Silverlight-Cailburn应用框架

 
 

源文档 <http://www.cnblogs.com/626498301/archive/2010/08/23/1806610.html>

 
 

 
 

 
 

 
 

以下是我不完整的文档

 
 

  • 操作过程说明

1.创建silverlight 4 应用程序,删除网站及测试工程

2.添加引用 :System.Windows.Interactivity.dll Caliburn.Micro.dll

3.删除MainPage.xaml

4.清除App.xaml.cs多余代码,像以下内容:

namespace Caliburn.Micro.Hello
{
using System.Windows;

public
partial
class App : Application
{
public App()
{
InitializeComponent();
}
}
}

 
 

其它见:http://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&referringTitle=Documentation

 
 

 
 

 
 

 
 

示例

2012年2月28日

11:03

 
 

AvalonDock

 
 

源文档 <http://avalondock.codeplex.com/>

SOCKS and HTTP Proxy Component v1.0.130.0

 
 

源文档 <http://www.starksoft.com/downloads.html>

 
 

 
 

 
 

blend

2012年2月28日

9:31

 
 

1. Storyboard

 
 

Storyboard动画是基于时间线的矢量动画,它与传统的基于图片轮换形成的动画不同,它的原理是通过时时的改变对象属性而形成的,第一次接触的朋友们可能会觉得比较吃力,但是慢慢体会一下,多练习一下就会渐渐的理解了。

 
 

动画适合创建简单的对象位移及直接性质的属性更改(在后面的教程中,我还将更深入的挖掘Storyboard动画的潜力,动态创建更复杂的基于KeyFrame的关键帧动画)。

 
 

源文档 <http://silverlightchina.net/html/zhuantixilie/game/2009/1207/284.html>

 
 

2. CompositionTarget

 
 

CompositionTarget动画,官方描述为:CompositionTarget对象可以根据每个帧回调来创建自定义动画。其实直接点,CompositionTarget创建的动画是基于每次界面刷新后触发的,与窗体刷新率保持一致,所以频率是固定的,很难人工介入控制。

 
 

动画适合全局属性的时时更改,例如我们后面要讲到的敌人或NPC以及地图等全体性的相对位移及属性更改时就要用到它了。

 
 

源文档 <http://silverlightchina.net/html/zhuantixilie/game/2009/1207/285.html>

 
 

3. DispatcherTimer (UIThread)

DispatcherTimer动画,该类型动画与CompositionTarget动画类似,是基于界面线程的逐帧动画,但他与CompositionTarget动画不同,DispatcherTimer动画可以轻松的进行参数设置

 
 

动画非常适合运用在Spirit(角色)的个人动画中,例如角色的移动,战斗,施法等动作。

 
 

源文档 <http://silverlightchina.net/html/zhuantixilie/game/2009/1207/286.html>

 
 

模板绑定:{TemplateBinding Background}

模板中数据绑定:Content="{Binding Text}"

 
 

官方教程

2012年5月4日

20:08

 
 

支持语音的 Fitch and Mather Stocks:设计与实现

 
 

源文档 <http://expression.microsoft.com/zh-cn/library/ms994635>

 
 

 
 

Sample data

2012年5月1日

22:07

 
 

1.添加数据:右边面板 data->create sample data->create sample data from exist class -> 选择你要的类对象后.

2:绑定:在usercontrol的第一级grid里选择右边的datacontext->可以选择sample data和原来的modalview.

3:注意: modalview与sample data的要bind的field property名字一样,比较好设计.

 
 

Action behavior command

2012年4月15日

17:26

 
 

选择一个控件后,在Assets窗口中:查找:

 
 

执行命令:InvokeCommandAction 配合ICommand

执行方法: CallMethodAction

 
 

设计状态判断

2012年4月8日

10:29

 
 

DesignerProperties.IsInDesignTool

 
 

wpf控件设计时支持(3)

 
 

源文档 <http://www.cnblogs.com/Clingingboy/archive/2009/02/02/1382451.html>

 
 

 
 

 
 

5新版

2012年4月4日

10:52

 
 

Microsoft Expression Blend Preview for Silverlight 5新版发布

 
 

源文档 <http://www.cnblogs.com/jv9/archive/2012/03/30/2424541.html>

 
 

出现:the prereleased version of this product has expired

 
 

 
 

Command简介1

2012年3月18日

21:21

 
 

(一)基本概念:

1
触发器Trigger
是一种对象,该对象侦听特定条件(例如事件触发或属性设置为某个值),并调用一项或多项关联的 Actions 作为响应

(1)Blend内置触发器:DataStoreChangedTriggerDataTrigger EventTriggerKeyTriggerPropertyChangedTriggerStoryboardCompletedTriggerTimerTrigger

(2) Triggers EventTrigger (在引发鼠标或键盘事件时触发 Action )到 CollisionTrigger (在两个对象彼此冲突时触发 Action )不尽相同。Triggers可以扩展,因此您可以创建出创意无限的自定义触发器

2
操作(Action:是只能"执行"
某些操作的对象

(1)Trigger 将调用 Invoke 方法,因此请确保希望 Action 执行的任何代码可采用 Invoke 方法内的某种形式进行访问

(2)为了将 Action 的目标确定为另一个元素,请从 TargetedTriggerAction中扩展表示Action 的类

(3)TargetedTriggerAction 中扩展了类后,您将能够使用 TargetName Target 属性访问目标元素

3
行为(Behavior):

(1)在没有来自 Trigger 或类似 Trigger 的项目的任何外部通知的情况下, Behavior 也可以执行。尽管必须满足某种条件,但它不必由 Trigger 调用

(2扩展 Behavior 类,并将其约束为希望 Behavior 与之关联的类型)您可以将希望在以下条件下运行的任何代码放在 Behaviors OnAttached OnDetaching 方法中:将 Behavior 与对象关联时或将它从其当前关联的对象分离时

(3)允许用户自定义行为功能的一种方式是公开 Commands (类型为 ICommand 的任何属性),其中每个命令都对应于 Behavior 可执行的一项操作

(4)通过将 Triggers 添加到 Behavior 中,并让这些 Triggers 触发一个或多个 InvokeCommandActions .InvokeCommandAction 仅执行一项操作:调用 Behavior 公开的 Command

(二)
您可以使用三种类型的行为: Behavour TriggerAction TargetedTriggerAction。如图:

 
 

源文档 <http://www.cnblogs.com/Joetao/articles/1921659.html>

 
 

 
 

Listbox

2012年3月5日

22:08

 
 

Silverlight/WPF中listbox横向展示内容的方法

 
 

源文档 <http://www.wpf123.com/news/?6026.html>

 
 

 
 

经验心得

2012年2月28日

9:40

 
 

按住ALT键,拖,会创建一个复制品

 
 

学习教程

2012年2月28日

9:31

 
 

Expression Blend实例中文教程(12) - 样式和模板快速入门Style,Template

 
 

源文档 <http://www.silverlightchina.net/html/tips/2010/0413/996.html>

 
 

Expression Blend实例中文教程(9) - 行为快速入门Behaviors

 
 

源文档 <http://www.silverlightchina.net/html/tips/2010/0402/952.html>

 
 

 
 

Expression Blend实例中文教程系列

 
 

源文档 <http://www.silverlightchina.net/html/zhuantixilie/getstart/2010/0409/978.html>

 
 

Silverlight MMORPG网页游戏开发课程[一期]

 
 

源文档 <http://www.silverlightchina.net/html/zhuantixilie/getstart/2011/0110/4803.html>

 
 

深蓝Silverlight游戏设计系列

 
 

源文档 <http://silverlightchina.net/html/zhuantixilie/getstart/2010/0325/909.html>

 
 

 
 

WPF基础到企业应用系列

 
 

源文档 <http://www.silverlightchina.net/html/zhuantixilie/getstart/2010/1113/3351.html>

 
 

Silverlight TV视频教程

 
 

源文档 <http://www.silverlightchina.net/html/zhuantixilie/getstart/2010/1113/3349.html>

 
 

 
 

演练:使用 Microsoft Expression Blend 创建按钮(3)

 
 

源文档 <http://hi.baidu.com/gaeiu/blog/item/e990dbf70824b632730eec5f.html>

 
 

silverlight

2012年2月27日

15:47

 
 

StyleTrigger

2012年4月16日

21:36

 
 

<Style x:Key="textBoxInError" TargetType="TextBox">

<Style.Triggers>

<Trigger Property="Validation.HasError" Value="true">

<Setter Property="ToolTip"

Value="{Binding RelativeSource={x:Static RelativeSource.Self},

Path=(Validation.Errors)[0].ErrorContent}"/>

</Trigger>

</Style.Triggers>

</Style>

 
 

用户名校验

2012年4月15日

21:09

 
 


<!-- Unbound Date of Birth field -->
<sdk:Label
Content="Date of Birth" IsRequired="True" Margin="5" />
<StackPanel
Orientation="Horizontal" Grid.Column="1">
<sdk:DatePicker
Height="23" />
<sdk:DescriptionViewer
Description="Please enter your date of birth."/>
</StackPanel>

<!-- ID Number field -->
<sdk:Label
Grid.Row="1" Margin="5"
Target="{Binding ElementName=tbIdNumber}" />
<StackPanel
Orientation="Horizontal" Grid.Column="1" Grid.Row="1">
<TextBox x:Name="tbIdNumber" Height="23" Width="100"

Text="{Binding IdNumber, Mode=TwoWay,


ValidatesOnExceptions=true, NotifyOnValidationError=true}" />

<sdk:DescriptionViewer
Target="{Binding ElementName=tbIdNumber}"/>
</StackPanel>

 
 

源文档 <http://msdn.microsoft.com/zh-cn/library/system.windows.controls.label(VS.95).aspx>

 
 

稳扎稳打Silverlight(34) - 3.0控件之Frame, Page, Label, DescriptionViewer, ValidationSummary

 
 

源文档 <http://www.cnblogs.com/webabcd/archive/2009/08/10/1542663.html>

 
 

 
 

 
 

加密

2012年4月15日

16:10

 
 

MD5Core Class

 
 

源文档 <http://archive.msdn.microsoft.com/SilverlightMD5/Wiki/View.aspx?title=MD5Core&referringTitle=Home>

 
 

 
 

DependencyProperty

2012年4月15日

11:01

 
 

DependencyProperty 的属性改变变事件需要使用PropertyMetadata 来处理,

 
 

public static readonly DependencyProperty LevelProperty = DependencyProperty.Register("Level", typeof(int), typeof(LevelXView), new PropertyMetadata(onPropertyChangedCallback));

 
 

public int Level

{

get { return (int)this.GetValue(LevelProperty); }

set { this.SetValue(LevelProperty, value); } // 放在这里,第二次以后不会执行

}

 
 

static void onPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)

{

(d as LevelXView).beforeChangedLevel((int)e.NewValue);

}

 
 

DataContext

2012年4月15日

9:53

 
 

DataContext="{Binding RelativeSource={RelativeSource Self}}"

 
 

 
 

 
 

canvas

2012年4月14日

23:14

 
 

Canvas.Left Attached Property

 
 

源文档 <http://msdn.microsoft.com/en-us/library/system.windows.controls.canvas.left.aspx>

 
 

Canvas.SetLeft(elem, _random.Next(canvas_width));

Canvas.SetTop(elem, _random.Next(canvas_height));

 
 

直接放在canvas界面上的触发器和行为,在OnAttach时,其AttachedObject的宽高还未计算.需要使用:

void onSizeChangedEventHandler(object sender, SizeChangedEventArgs e)

{

this.BlockControl.SizeChanged -= onSizeChangedEventHandler;

OnGameEnvironmentInitialized();

}

 
 

protected override void OnGameEnvironmentInitialized()

{

if (this.BlockControl.ActualWidth == 0)

{

this.BlockControl.SizeChanged += onSizeChangedEventHandler;

return;

}

}

 
 

oob安装

2012年4月10日

11:56

 
 

Installing Silverlight OOB Application using a Setup Project

 
 

源文档 <http://www.codeproject.com/Articles/179756/Installing-Silverlight-OOB-Application-using-a-Set>

 
 

创建Silverlight 5浏览器内受信应用

 
 

源文档 <http://www.cnblogs.com/xfrog/archive/2012/03/05/2381144.html>

 
 

 
 

 
 

 
 

动态指定Resource

2012年4月7日

13:29

 
 

1.申请变量

private Style GameScopeTextStyle { get; set; }

 
 

2.赋值

GameScopeTextStyle = this.GameEnvironment.RootElement.Resources["GameScopeTextStyle"] as Style;

 
 

if (GameScopeTextStyle == null)

{

GameScopeTextStyle = Application.Current.Resources["GameScopeTextStyle"] as Style;

}

 
 

3.使用:

TextBlock textBlock = new TextBlock();

textBlock.Text = this.BlockControl.ScoreValue.ToString();

textBlock.RenderTransform = new TranslateTransform();

textBlock.Name = "textBlock";

 
 

if (GameScopeTextStyle != null)

{

textBlock.Style = GameScopeTextStyle;

}

 
 

 
 

xaml拉伸

2012年4月4日

23:31

 
 

<Storyboard x:Name="Storyboard1">

<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="truck"

Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">

<EasingDoubleKeyFrame KeyTime="00:00:03" Value="0.15"/>

</DoubleAnimationUsingKeyFrames>

<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="truck"

Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">

<EasingDoubleKeyFrame KeyTime="00:00:03" Value="0.15"/>

</DoubleAnimationUsingKeyFrames>

</Storyboard>

 
 

源文档 <http://beniao.blog.51cto.com/389148/303346>

 
 

动态创建xaml

2012年4月4日

16:09

 
 

Silverlight 动态创建Xaml

 
 

源文档 <http://archive.cnblogs.com/a/1939473/>

 
 

 
 

 
 

 
 

 
 

稳扎稳打Silverlight(31) - 2.0Tip/Trick之加载XAP,加载XAML,加载DLL……

 
 

源文档 <http://www.bianceng.cn/webkf/Silverlight/201004/16692.htm>

 
 

 
 

 
 

navigation

2012年4月4日

12:38

 
 

Silverlight实例教程 - 理解Navigation导航框架Page类

 
 

源文档 <http://blog.csdn.net/jv9/article/details/6640506>

 
 

Resource

2012年3月18日

23:05

 
 

Silverlight Resource 概览

 
 

源文档 <http://hi.baidu.com/liongg/blog/item/c258f8194c02ec7cdab4bd4f.html>

 
 

 
 

动态加载xaml

2012年3月18日

23:04

 
 

用反射来动态加载XAML

 
 

源文档 <http://hi.baidu.com/liongg/blog/item/df3d5982374e52aa0df4d26f.html>

 
 

 
 

通信技术

2012年3月18日

15:52

 
 

面向Web服务的游戏设计1:选择适合的Silverlight通信技术

 
 

源文档 <http://www.cnblogs.com/erichan/archive/2010/06/04/1751694.html>

 
 

利用VistaWCF中强大P2P通信功能

 
 

源文档 <http://winsystem.ctocio.com.cn/tips/424/8129924_2.shtml>

 
 

 
 

 
 

本地化

2012年3月17日

22:48

 
 

Silverlight本地化 (示例)

 
 

源文档 <http://www.cnblogs.com/nasa/archive/2009/08/07/silverlight-Localization.html>

 
 

本地化基于 Silverlight 的应用程序 (MSDN)

 
 

源文档 <http://msdn.microsoft.com/zh-cn/library/cc838238(v=VS.95).aspx>

 
 

oob与com

2012年3月14日

20:38

 
 

Silverlight实例教程 - Out of Browser与COM互操作实例

 
 

源文档 <http://silverlightchina.net/html/tips/2010/0808/1703.html>

 
 

 
 

 
 

Sl js交互

2012年3月10日

11:02

 
 

下面这种方式,不支持oob,且我尝试失败:

silverlightjavascript交互

 
 

源文档 <http://www.cnblogs.com/HellenTian/archive/2010/11/11/1874711.html>

 
 

下面这种方式,需要网页域与silverlight域相同,也就是说不支持oob

window.external.notify("Search completed")

 
 

源文档 <http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser.scriptnotify(v=VS.95).aspx>

 
 

在oob中显示pkrss.sinapp.com显示不出来…

 
 

有时间测试一下签名+在浏览器内创建sapi对象.

 
 

如果在sl中使用webbrowser控件,只能在oob运行,浏览器内无法使用.

 
 

 
 

示例

2012年2月27日

15:48

 
 

http://www.silverlight.net showcase

 
 

Uploading and downloading images from WCF in Silverlight

 
 

源文档 <http://www.silverlightshow.net/items/Uploading-and-downloading-images-from-WCF-in-Silverlight.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+silverlightshow+%28SilverlightShow%3A+Silverlight+Community%29&utm_content=Google+Reader>

 
 

Microsoft Previews Great WPF and Silverlight Apps with Facebook OpenStreams API

 
 

源文档 <http://www.silverlight-travel.com/blog/2009/04/28/microsoft-previews-great-wpf-and-silverlight-apps-with-facebook-openstreams-api/>

 
 

3D Photo Gallery

 
 

源文档 <http://silverlike.net/3d-photo-gallery/>

 
 

Flickr Image Gallery

 
 

源文档 <http://silverlike.net/flickr-image-gallery/>

 
 

Expression >Gallery

 
 

源文档 <http://gallery.expression.microsoft.com/>

 
 

Silverlight播放音乐并同步显示lyc歌词

 
 

源文档 <http://www.silverlightchina.net/html/tips/2010/0414/1002.html>

 
 

 
 

 
 

 
 

破解silverlight

2012年2月27日

15:45

 
 

一步一步教你破解Silverlight源码,反编译Silverlight项目的实操

 
 

源文档 <http://www.xueit.com/silverlight/show-5184-3.aspx>

 
 

可以把 http://agileitgroup.com/MediaWall/index.html 这个3D图片墙地址的东西反编译

 
 

3d技术

2012年2月27日

15:48

 
 

Developing 3D Objects in Silverlight

 
 

源文档 <http://msdn.microsoft.com/en-us/magazine/hh547098.aspx>

 
 

日志

2011年10月13日

17:10

 
 

本文介绍如何在Silverlight中加入NLog开源工具实现日志跟踪记录功能,并添加两种输出方式。一种是文件输出。

一种使用tcp连接将日志实时输出到日志窗口中以便实时跟踪程序状态。

 
 

     NLog .net 下的一个日志跟踪工具,支持多种终端输出,如文件、数据库、网络、命令台窗口等。其支援.net

Silverlight Windows Phone 7。并可定制多种标准的输出编排格式,是一款优秀的开源工具。
项目主页为 http://nlog.codeplex.com/ ,官网为http://nlog-project.org/。

 
 

 
 

1、将日志信息输出到文本文件中

 
 

       由于Silverlight默认无读取配置文件的功能,所以需要使用编码方式加入NLog。

       以下是使用文件输出的配置代码,需注意的是由于访问权限,如要使用文件输出则需将SL设置为Out of browser模式

 
 

并且将 require trust 选项设置为真。而且只能存放在指定的文件夹中,示例中specialfolder:MyDocuments 指定了放在"我的文档"
目录中。

 
 

      
 

+ expand sourceview plain

 
 

 
 

        通常在代码初始化放在Application_Startup之中,接着便可使用日志功能输出调试信息,如下所示:      

        LogManager.GetCurrentClassLogger().Info("test message") ;

        每次调用函数麻烦可以保存为全局对象 G_Logger,然后使用 G_Logger.Info("");

 
 

2、将日志信息实时输出到独立的可视化窗口中

    
 

     由于Silverlight不支持命令行窗口输出,所以开始想自己写一个Silverlight 页面作为输出终端。

幸运的是,发现NLog支持第三方的显示工具,输出目标配置模式为 NLogViewerTarget。其原理是使用

socket 发送信息到显示终端中。

       可用的第三方工具为sentinel  http://sentinel.codeplex.com/, 另一工具是 Log2Console(未测试)

     下载并启动sentinel,选择NLog viewer类型,选择 tcp ,端口为4530(需为silverlight socket支持的端口号)

     
 

      配置代码为 

      
 

view plain

  1. var config = new NLogViewerTarget();  
  2.             config.Address = "tcp4://127.0.0.1:4530";  
  3.             config.Name = "viewer";  
  4.  SimpleConfigurator.ConfigureForTargetLogging(  
  5.                config  
  6.                   ,  
  7.                LogLevel.Debug);  

 
 

     注意,这里需要指定tcp4而不能是tcp,否则会无法通信!

    同时需要启动策略服务器以支持silverlight socket通信,
以下文章有提及 
http://blog.csdn.net/banmuhuangci/archive/2009/05/16/4192031.aspx 

 
 

        这时成功的话在运行测试后会将输出信息输出到sentinel窗口中

        
 


      
 

 
 

     总结,正所谓磨刀不误砍柴工,一个成熟的开发环境是必须要加入日志跟踪功能的。希望本文能对大家有所帮助。

由于作者个人水平有限,如有不足之处还请指出。如有改进建议本人将十分感激,一切重在交流学习。

 
 

    本文版权归个人所有,如需转载请注明出处,谢谢。 http://blog.csdn.net/kecp

 
 

源文档 <http://blog.csdn.net/kecp/article/details/6554321>

 
 

 
 

语法

2011年10月11日

10:32

 
 

一. 基本型/内置型 用户自定义型

A,内置类型:CS使用.net FrameWork库中的数据类型

sbyte = System.SByte,...

类型 字节数 解释

byte 1 无符号字节型

sbyte 1 有符号字节型

short 2 有符号短字节型

ushort 2 无符号短字节型

int 4 有符号整型

uint 4 无符号整型

long 8 有符号长整型

ulong 8 无符号长整型

float 4 浮点数

double 8 双精度数

decimal

8 固定精度数

string unicode字串型

char unicode字符型

bool 真假布尔型//只接受true和false两种值。不接受任何整数类型。

B,用户定义类型包括:

类类型(class)

结构类型(struct)

接口类型(interface)

2,值类型(Value Types)和引用类型(Reference Types)

A,值类型:内存顺序分配在栈中。他们包括:所有基本或内置类型(不包括string类型)、结构类型、枚举类型(enum type)

B,引用类型:内存非线性分配在堆中,当它们不再被使用时CS通过垃圾收集器自动释放内存(C++用delete)。它们使用new运算符来创建。

引用类型包括:类类型、接口类型、象数组这样的集合类型类型、字串类型、枚举类型

结构型适于快速访问和拥有少量成员的数据类型。如果涉及量较多,你应该创建一个类来实现他。

3,数据类型转换

隐式转换:从低精度的转换到高精度的,所以不可能转换到char;另外可以把0隐式转换成枚举型,其他整数不行。

显式转换

static

void Main(string[] args)


short shortResult, shortVal =

4;

int integerVal =

67;

long longResult;

float floatVal =

10.5F;

double doubleResult, doubleVal =

99.999;

string stringResult, stringVal =

"17";

bool boolVal =

true;

Console.WriteLine("Variable Conversion Examples\n数据类型转换范例\n");

doubleResult = floatVal * shortVal;

Console.WriteLine("Implicit,->double:{0}*{1}->{2}", floatVal, shortVal, doubleResult);

shortResult = (short)floatVal;

Console.WriteLine("Implicit,->short:{0}->{1}", floatVal, shortResult);

stringResult = Convert.ToString(boolVal) + Convert.ToString(doubleVal);

Console.WriteLine("Explicit,->string:\"{0}\"+\"{1}\"->{2}", boolVal, doubleVal, stringResult);

longResult = integerVal + Convert.ToInt64(stringVal);

Console.WriteLine("Mixed,->long {0}+{1}->{2}", integerVal, stringVal, longResult);


 
 

三,变量:

1,普通变量:

(1),命名规则:字母或_或@ + 字母或_或数字 (/用于转义,@用于逐个转义指定,@常用于保留关键字前以保持与其他语言兼容)

(2),声明变量: 变量类型 变量名

变量赋值:变量 = 要赋的值

C#变量被访问之前必须被初始化;否则编译时会报错。因此,不可能访问一个未初始化变量(如不确定的指针、超出数组边界的表达式)。变量在使用前最好习惯是要先声明和初始化。

(3)C#中没有全局的的变量或全局函数,全局方式的操作是通过静态函数和静态变量来实现的。

int i;

string text;//在循环外未初始化

for (i =

0;i<10;I++) {

text =

"Line"

+ Convert.ToString(i);//在循环中未初始化,在退出循环的时候会丢失值,再引用就出错。

Console.WriteLine("{0},text);

}

Console.WriteLine("Last txet output in loop:{0},text);//出错。改正方法是在循环外初始化:string text="";

(4)命名约定:简单的用camelCase,复杂的用PascalCase

(5)变量的七种类型:

class A {

public

static

int x;//静态变量,存在期从类装载直到该程序结束。

int y;//非静态变量,或实例变量,从类实例创建到实例空间释放。

/*v[0]是数组元素,a是值参数,b是引用参数,c是输出参数 */

void F(int[] v,int a,ref

int b,out

int c){

int i =

1;//局部变量,不会被初始化

c = a + b++;//

}

}

2,枚举

enum 枚举名:枚举值类型(默认是int,默认赋值0,1,2...)


枚举值1=...,

枚举值2=...,

枚举值3,//不赋值的话,默认为最后一个明确具体值的值+1

...


枚举名 变量名=枚举名.枚举值

namespace Ch05Ex02 {

enum orientation:byte {

north=1,

south=2,

east=3,

west=4

}

///Class1's Desciption

class Class1 {

static

void Main(string[] args) {

byte directionByte;

string directionString;

orientation myDirection = orientation.north;

Console.WriteLine("mydirection = {0}", myDirection);

directionByte = (byte)myDirection;//因为enum存得下byte,所以理论上可以正确地反过来转换,但逻辑上不一定正确。myDirection = (orientation)myByte;

directionString = Convert.ToString(myDirection);//等价命令是directionString = myDirection.ToString();

//因为不单是把枚举变量值转存到string变量中,所以不能用string(mydirection);

// 反向转换命令是orientation myDirection = (orientation)Enum.Parse(typeof(orientation),myString);但由于enum不一定存得下 string,所以可能出错。如myString赋值为North,就不能映射到orientation中的north,出错。

Console.WriteLine("byte equivalent = {0}", directionByte);

Console.WriteLine("string equivalent = {0}", directionString);

}

}

}

 
 

3,结构

struct 结构名:


访问方式1 变量类型1 变量名1;//访问方式public/private

访问方式2 变量类型2 变量名2;

...


结构名 结构变量名;

结构变量名.枚举值=...;

4,一维数组

变量类型[] 数组名 =

new 变量类型[元素个数]{元素0,元素1,元素2...}//元素个数必须是整数或者整数常量,而且必须与后面的元素列值个数相同,否则出错。元素个数的new声明和后面的元素列值可以只选一个,就能声明并初始化数组。

遍历方法

A,For循环到.Length

for(i=0,i<friendNames.Length,i++) {

Console.WriteLine(friendNames[i]);

}

B,Foreach进行只读访问

foreach(string listName in friendNames) {

Console.WriteLine(listName);

}

5,二维数组(多维)

变量类型[,] 数组名 =

new 变量类型[一维元素个数,二维元素个数]{{元素00,元素01,元素02...},{元素10,元素11,元素12...}...}

6,直角数组(交错数组,数组中的数组)

7,字符串操作:

string myString =

"I have a dream.";

char myChar = myString[2];//把string变量当作只读的char数组使用,不能改写myString[2]

char[] myChars = myString.ToCharArray();

char[]separator = {'

'};//设定分隔符

string[] myWords =myString.Split(separator);//分隔成数组

Console.WriteLine("myString have {0} chars",myString.Length);

myString=myString.ToLower();//转小写

myString=myString.ToUpper();//转大写

myString=myString.Trim();//删前后空格

myString=myString.TrimStart();//删前空格

myString=myString.TrimEnd();//删后空格

myString=myString.PadLeft(位数);//前补空格到指定位数

myString=myString.PadRight(位数);//后补空格到指定位数

myString=myString.PadLeft(位数,字符);//前补指定字符到指定位数

char[] trimChars = {"e","#","*"};

myString = myString.trim(trimChars);//删指定字符

四,常量:

Const int intTwo =

2 (必须声明的同时赋值)

五,运算符:按优先级顺序排列

 
 

算术运算符:前缀的++和-- ,前缀一元的+和- 乘 * 除 / 求余 % 加 + 减 -

位移运算符:<<,>>

比较运算符:小于 < 大于 > 小于等于 <= 大于等于 >=

比较运算符:==,!=

逻辑运算符:&

逻辑运算符:^

逻辑运算符:|

逻辑运算符:&&

逻辑运算符:||

比较运算符:等于 = *=

/=

=

+=

-=

<<=

>>=

x%x=

^= |=

后缀的++和--

六,名称空间

using system; //system是.net FrameWork应用程序根命名空间,之后就能在全局名称空间引用system中的代码。

namespace 空间名称

{

using 空间名称2.代码2;//之后就能在代码1处直接引用代码2

代码1;

namespace 空间名称2

{

代码2;

}

}

七,条件语句

A,If语句:通用判断

If (条件1)

代码1;

Else

代码2;

If (条件1)

{}

Else

{}

B,Switch语句:用于同条件多结果判断

Switch (条件)

{

Case 结果1:

代码1;

break;

Case 结果2:

代码2;

break;

Case 结果3:

代码3;

goto Case 结果2;//此时Case..相当于一个Label

Case 结果4:

代码4;

Return;

Case 结果5:

Case 结果6:

Case 结果7:

代码567;//只要满足上面三个Case之一就执行。

break;

...

Default:

代码;

break;


C,三元运算语句:(条件)?True结果:False结果

常用于简单赋值语句:string myString = (myInteger<10)?"Less than 10":"Great than or equal to";

或者用于简单格式化文本语句:Console.WriteLine("I am {0} year{1} old.",myinteger,myinteger==1?"":"s");

八,循环语句:

A,Do...While: 当条件为True时循环。

Do

{...}

While(条件);//分号不可少

B,While...: 当条件为True 时循环。

While(条件)

{...}

 
 

C,For...: 使用计数器循环。

For (变量;条件;操作)//可以在此时声明变量,但作用域就仅限于循环内了。

{...

Break;//跳出整个循环

Return;

Continue;//中止当前循环,继续下一个循环

Goto 标签;//禁止从循环外部用goto跳入循环内部

}

九,函数

A,函数定义:

static 返回值类型/void 函数名(参数类型1 参数1,参数类型2 参数2,...) {

...

return 返回值;//return必须在函数结束前被处理,不能跳过

//return ;//当用于void时用不带返回值的return来中止函数。

}

B,参数数组:

static

int sumVals(params

int[] vals) {

int sum =

0;

foreach(int val in vals) {

sum+=val;

}

return sum;

}

static

void Main(string[] args)
{

int sum = sumVals(1,5,2,9,8);

Console.WriteLine("Summed Values = {0}",sum);

}

C,值传递参数/引用传递参数/out输出参数

static

void showDouble(ref

int val)//引用传递参数 {

val*=2;

Console.WriteLie("val doubled = {0}",val);

}

static

void showDouble2(int val)//值传递参数 {

val*=2;

Console.WriteLine("val doubled = {0}",val);

}

static

void showDouble3(int val,out

int valIndex)//out输出参数 {

val*=2;

valIndex++;

Console.WriteLine("val doubled = {0}",val);

}

int myNmuber =

5;

showDouble(ref myNumber);//引用传递参数,会改变myNumber值,所以要求myNumber必须不是常量或者未初始化的变量。

showDouble2(myNumber);//值传递参数,不会改变myNumber值

int valindex;//out输出参数,不用初始化,初始化了也会在函数开始执行时丢失值。

showDouble3(myNumber,out valIndex);

D,全局变量

static/const 变量名//const定义的全局变量是只读的

当全局变量与局部变量同名时,局部变量优先,要用类似class1.myString来引用全局变量。

E,Main()函数;

static

void Main()

static

void Main(string[] args)//args是函数命令行参数

static

int Main()//返回一个表示函数终止状态的int值

static

int Main(string[] args)//返回一个表示函数终止状态的int值

F,结构中的函数

G,同名函数的重载:同名,签名不同,系统自动识别使用哪个函数

H,委托:用于把引用存储为函数以灵活调用函数

十,面向对象基础

十一,类

1,类的定义

class 类名 {

//类成员

}

internal/public

sealed/abstract

十二,接口

interface IMyInterface {

//接口成员

}

 
 

 
 

 
 

关键字

 
 

internal

关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的,

 
 

protected internal

 
 

可访问性的意思是受保护"或"内部,而不是受保护"和"内部。换句话说,可以从同一程序集内的任何类(包括派生类)中访问
protected
internal
成员。若要限制为只有同一程序集内的派生类可以访问,请将类本身声明为内部,并将其成员声明为受保护。

 
 

正则表达式

2012年3月6日

9:47

 
 

示例1 多行解析

解析正则表达式,每行以 数字,文本\r\n 结束:

 
 

_stk000_items = new List<SysSettingApFile_Stk000Item>();

 
 

string content = filecontent("stk000");

System.Text.RegularExpressions.Regex regex = new Regex("^(\\d+),(.+)\r$",RegexOptions.Multiline);

foreach (Match line in regex.Matches(content))

{

var gp = line.Groups;

_stk000_items.Add(new SysSettingApFile_Stk000Item() { groupid = Convert.ToUInt16(gp[1].Value), name = (string)gp[2].Value });

}

 
 

 
 

参考大全

各式各样的正则表达式参考大全:

^\d+$  //匹配非负整数(正整数 + 0)

//匹配整数 ^\d+(\.\d+)?$  //匹配非负浮点数(正浮点数 + 0)

^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮点数

^((-\d+(\.\d+)?)|(0+(\.0+)?))$  //匹配非正浮点数(负浮点数 + 0)

^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配负浮点数

^(-?\d+)(\.\d+)?$  //匹配浮点数

^[A-Za-z]+$????????? //匹配由26个英文字母组成的字符串

^[A-Z]+$ ??? //匹配由26个英文字母的大写组成的字符串

^[a-z]+$  //匹配由26个英文字母的小写组成的字符串

^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串

^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$    //匹配email地址

^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$  //匹配url

匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/<(.*)>.*<\/>|<(.*) \/>/

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL的正则表达式:^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?

匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$

 
 

下表是元字符及其在正则表达式上下文中的行为的一个完整列表,具体到每个正则表达式符号:

\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

* 匹配前面的子表达式零次或多次。

+ 匹配前面的子表达式一次或多次。+ 等价于 {1,}。

? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。

{n} n 是一个非负整数,匹配确定的n 次。

{n,} n 是一个非负整数,至少匹配n 次。

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。

? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。

(pattern) 匹配pattern 并获取这一匹配。 (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。 (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 (?!pattern) 负向预查,与(?=pattern)作用相反 x|y 匹配 x 或 y。

[xyz] 字符集合。

[^xyz] 负值字符集合。

[a-z] 字符范围,匹配指定范围内的任意字符。

[^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。

\b 匹配一个单词边界,也就是指单词和空格间的位置。

\B 匹配非单词边界。

\cx 匹配由x指明的控制字符。

\d 匹配一个数字字符。等价于 [0-9]。

\D 匹配一个非数字字符。等价于 [^0-9]。

? \f 匹配一个换页符。等价于 \x0c 和 \cL。

\n 匹配一个换行符。等价于 \x0a 和 \cJ。

\r 匹配一个回车符。等价于 \x0d 和 \cM。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\t 匹配一个制表符。等价于 \x09 和 \cI。

\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。

\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。

\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。

\num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。

\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。 \nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八.

 
 

源文档 <http://www.jb51.net/tools/zhengze.htm>

 
 

线程池

2012年3月5日

13:47

 
 

后台线程执行某工作

ThreadPool.QueueUserWorkItem( (o) => action(argument) );

 
 

事件代码1

2012年3月5日

10:55

 
 

Observable.FromEvent<SettablePhotoResult>(h => this.task.Completed += h, h => this.task.Completed -= h)

.Where(e => e.EventArgs.ChosenPhoto != null)

.ObserveOn(Scheduler.ThreadPool)

.Select(a => CreatePictureFile(a.EventArgs.ChosenPhoto))

.ObserveOn(Scheduler.Dispatcher)

.Subscribe(p =>

{

this.Answer.Value = p;

this.CreatePictureBitmap(p);

this.Capturing = false;

this.RaisePropertyChanged(string.Empty);

this.CameraCaptureCommand.RaiseCanExecuteChanged();

});

 
 

DelegateCommand 当第二个函数为true时,执行前行面命令

.Select 生成一个新的顺序流

.ObserveOn 让某个任务执行某些行为

Subscribe 当行为触发时,具体的操作

 
 

SettablePhotoResult派生于TaskEventArgs

Observable.FromEvent<SettablePhotoResult> 查找所有注册SettablePhotoResult的

//

// 摘要:

// Returns an observable sequence that contains the values of the underlying

// .NET event.

//

// 类型参数:

// TEventArgs:

//

// 返回结果:

// Returns System.IObservable<T>.

public static IObservable<IEvent<TEventArgs>> FromEvent<TEventArgs>(Action<EventHandler<TEventArgs>> addHandler, Action<EventHandler<TEventArgs>> removeHandler) where TEventArgs : EventArgs;

 
 

 
 

public SettablePhotoResult TaskEventArgs { get; set; }

var sri = Application.GetResourceStream(imageUri);

TaskEventArgs = new SettablePhotoResult { ChosenPhoto = sri.Stream };

 
 

if (Completed != null)

Completed(null, TaskEventArgs);

 
 

当Completed执行完了,会去触上面注册的委托函数?

 
 

 
 

 
 

 
 

C#字符串格式化说明(String.Format)

2011年12月20日

17:09

 
 

输出两位小数: ret = string.Format("{0:f2}", ((double)price+5.0f) / 1000.0f);

 
 

如何:在十六进制字符串与数值类型之间转换(C# 编程指南)

 
 

源文档 <http://msdn.microsoft.com/zh-cn/library/bb311038.aspx>

 
 

 
 

 
 

C#字符串格式化说明(String.Format)

1 前言

 
 

如果你熟悉Microsoft Foundation ClassesMFC)的CStringWindows Template LibraryWTL)的CString或者Standard Template LibrarySTL)的字符串类,那么你对String.Format方法肯定很熟悉。在C#中也经常使用这个方法来格式化字符串,比如下面这样:

int x = 16;

decimal y = 3.57m;

string h = String.Format( "item {0} sells at {1:C}", x, y );

Console.WriteLine(h);

 
 

在我的机器上,可以得到下面的输出:

 
 

item 16 sells at 3.57

 
 

也许你的机器上的输出和这个不太一样。这是正常的,本文稍后就会解释这个问题。

 
 

在我们日常使用中,更多的是使用Console.WriteLine方法来输出一个字符串。其实String.Format Console.WriteLine有很多共同点。两个方法都有很多重载的格式并且采用无固定参数的对象数组作为最后一个参数。下面的两个语句会产生同样的输出。

 
 

Console.WriteLine( "Hello {0} {1} {2} {3} {4} {5} {6} {7} {8}", 123, 45.67, true, 'Q', 4, 5, 6, 7, '8');

string u = String.Format("Hello {0} {1} {2} {3} {4} {5} {6} {7} {8}", 123, 45.67, true, 'Q', 4, 5, 6, 7, '8');

Console.WriteLine(u);

 
 

输出如下:

 
 

Hello 123 45.67 True Q 4 5 6 7 8

Hello 123 45.67 True Q 4 5 6 7 8

 
 

2 字符串格式

 
 

String.FormatWriteLine都遵守同样的格式化规则。格式化的格式如下:"{ N [, M ][: formatString ]}", arg1, ... argN,在这个格式中:

 
 

1 N是从0开始的整数,表示要格式化的参数的个数

 
 

2 M是一个可选的整数,表示格式化后的参数所占的宽度,如果M是负数,那么格式化后的值就是左对齐的,如果M是正数,那么格式化后的值是右对齐的

 
 

3 formatString是另外一个可选的参数,表示格式代码

 
 

argN表示要格式化的表达式,和N是对应的。

 
 

如果argN是空值,那么就用一个空字符串来代替。如果没有formatString,那么就用参数N对应的ToString方法来格式化。下面的语句会产生同样的输出:

 
 

public
class TestConsoleApp

{

public
static
void Main(string[] args)

{

Console.WriteLine(123);

Console.WriteLine("{0}", 123);

Console.WriteLine("{0:D3}", 123);

}

}

 
 

输出是:

 
 

123

123

123

 
 

也可以通过String.Format得到同样的输出。

 
 

string s = string.Format("123");

string t = string.Format("{0}", 123);

string u = string.Format("{0:D3}", 123);

Console.WriteLine(s);

Console.WriteLine(t);

Console.WriteLine(u);

 
 

因此有如下结论:

 
 

,M)决定了格式化字符串的宽度和对齐方向

 
 

:formatString)决定了如何格式化数据,比如用货币符号,科学计数法或者16进制。就像下面这样:

 
 

Console.WriteLine("{0,5} {1,5}", 123, 456); // 右对齐

Console.WriteLine("{0,-5} {1,-5}", 123, 456); // 左对齐

 
 

输出是

 
 

123 456

123 456

 
 

也可以合并这些表达式,先放一个逗号,再放一个冒号。就像这样:

 
 

Console.WriteLine("{0,-10:D6} {1,-10:D6}", 123, 456);

 
 

输出是:

 
 


000123 000456

 
 

我们可以用这种格式化特性来对齐我们的输出。

 
 

Console.WriteLine("\n{0,-10}{1,-3}", "Name","Salary");

Console.WriteLine("----------------");

Console.WriteLine("{0,-10}{1,6}", "Bill", 123456);

Console.WriteLine("{0,-10}{1,6}", "Polly", 7890);

 
 

输出是:

 
 

Name Salary

----------------

Bill 123456

Polly 7890

 
 

3 格式化标识符

 
 

标准的数学格式字符串用于返回通常使用的字符串。它们通常象X0这样的格式。X是格式化标识符,0是精度标识符。格式标识符号共有9种,它们代表了大多数常用的数字格式。就像下表所示:

 
 

 
 

字母

含义

Cc

Currency 货币格式

Dd

Decimal 十进制格式(十进制整数,不要和.NetDecimal数据类型混淆了)

Ee

Exponent 指数格式

Ff

Fixed point 固定精度格式

Gg

General 常用格式

Nn

用逗号分割千位的数字,比如1234将会被变成1,234

Pp

Percentage 百分符号格式

Rr

Round-trip 圆整(只用于浮点数)保证一个数字被转化成字符串以后可以再被转回成同样的数字

Xx

Hex 16进制格式

如果我们使用下面的表达方式,让我们看看会发生什么

 
 

public
class FormatSpecApp

{

public
static
void Main(string[] args)

{

int i = 123456;

Console.WriteLine("{0:C}", i); // 123,456.00

Console.WriteLine("{0:D}", i); // 123456

Console.WriteLine("{0:E}", i); // 1.234560E+005

Console.WriteLine("{0:F}", i); // 123456.00

Console.WriteLine("{0:G}", i); // 123456

Console.WriteLine("{0:N}", i); // 123,456.00

Console.WriteLine("{0:P}", i); // 12,345,600.00 %

Console.WriteLine("{0:X}", i); // 1E240

}

}

 
 

精度控制标识控制了有效数字的个数或者十进制数小数的位数。

 
 


Console.WriteLine("{0:C5}", i); // 123,456.00


Console.WriteLine("{0:D5}", i); // 123456


Console.WriteLine("{0:E5}", i); // 1.23456E+005


Console.WriteLine("{0:F5}", i); // 123456.00000


Console.WriteLine("{0:G5}", i); // 1.23456E5


Console.WriteLine("{0:N5}", i); // 123,456.00000


Console.WriteLine("{0:P5}", i); // 12,345,600.00000 %


Console.WriteLine("{0:X5}", i); // 1E240

 
 

R(圆整)格式仅仅对浮点数有效。这个值首先会用通用格式来格式化。对于双精度数有15位精度,对于单精度数有7位精度。如果这个值可以被正确地解析回原始的数字,就会用通用格式符来格式化。如果不能解析回去的话,那么就会用17位精度来格式化双精度数,用9位精度来格式化单精度数。尽管我们可以在圆整标识符后面添加有效数字的位数,但是它会被忽略掉。

 
 

double d = 1.2345678901234567890;

Console.WriteLine("Floating-Point:\t{0:F16}", d); // 1.2345678901234600

Console.WriteLine("Roundtrip:\t{0:R16}", d); // 1.2345678901234567

 
 

如果标准格式化标识符还不能满足你。你可以使用图形化格式字符串来创建定制的字符串输出。图形化格式化使用占位符来表示最小位数,

 
 

最大位数,定位符号,负号的外观以及其它数字符号的外观。就像下表所示

 
 

 
 

符号

名称

含义

0

0占位符

0填充不足的位数

#

数字占位符

#代替实际的位数

.

十进制小数点

  

,

千位分隔符

用逗号进行千位分割,比如把1000分割成1,000

%

百分符号

显示一个百分标识

E+0

E-0

e+0

e-0

指数符号

用指数符号格式化输出

\

专一字符

用于传统格式的格式化序列,比如"\n"(新行)

'ABC'

"ABC"

常量字符串

显示单引号或者双引号里面的字符串

;

区域分隔符

如果数字会被格式化成整数,负数,或者0,用;来进行分隔

,.

缩放符号

数字除以1000

看下面的例子:

 
 

double i = 123456.42;

Console.WriteLine();

Console.WriteLine("{0:000000.00}", i); //123456.42

Console.WriteLine("{0:00.00000000e+0}", i); //12.34564200e+4

Console.WriteLine("{0:0,.}", i); //123

Console.WriteLine("{0:#0.000}", i); // 123456.420

Console.WriteLine("{0:#0.000;(#0.000)}", i); // 123456.420

Console.WriteLine("{0:#0.000;(#0.000);<zero>}", i); // 123456.420

Console.WriteLine("{0:#%}", i); // 12345642%

 
 

i = -123456.42;

Console.WriteLine();

Console.WriteLine("{0:000000.00}", i); //-123456.42

Console.WriteLine("{0:00.00000000e+0}", i); //-12.34564200e+4

Console.WriteLine("{0:0,.}", i); //-123

Console.WriteLine("{0:#0.000}", i); // -123456.420

Console.WriteLine("{0:#0.000;(#0.000)}", i); // (123456.420)

Console.WriteLine("{0:#0;(#0);<zero>}", i); // (123456)

Console.WriteLine("{0:#%}", i); // -12345642%

 
 

i = 0;

Console.WriteLine();

Console.WriteLine("{0:0,.}", i); //0

Console.WriteLine("{0:#0}", i); // 0

Console.WriteLine("{0:#0;(#0)}", i); // 0

Console.WriteLine("{0:#0;(#0);<zero>}", i); // <zero>

Console.WriteLine("{0:#%}", i); // %

 
 

4 数字字符串的解析

 
 

所有的基础类型都有ToString方法,它是从object类型中继承过来的。所有的数值类型都有Parse方法,它用字符串为参数,并且返回相等的数值。比如

 
 

public
class NumParsingApp

{

public
static
void Main(string[] args)

{

int i = int.Parse("12345");

Console.WriteLine("i = {0}", i);

 
 

int j = Int32.Parse("12345");

Console.WriteLine("j = {0}", j);

 
 

double d = Double.Parse("1.2345E+6");

Console.WriteLine("d = {0:F}", d);

 
 

string s = i.ToString();

Console.WriteLine("s = {0}", s);

}

}

 
 

输出如下

 
 

i = 12345

j = 12345

d = 1234500.00

s = 12345

 
 

在缺省状况下,某些非数字字符是可以存在的。比如开头和结尾的空白。逗号和小数点,加号和减号,因此,下面的Parse语句是一样的

 
 

string t = " -1,234,567.890 ";

//double g = double.Parse(t); // 和下面的代码干同样的事情

double g = double.Parse(t,

NumberStyles.AllowLeadingSign |

NumberStyles.AllowDecimalPoint |

NumberStyles.AllowThousands |

NumberStyles.AllowLeadingWhite |

NumberStyles.AllowTrailingWhite);

Console.WriteLine("g = {0:F}", g);

 
 

输出都是这样

 
 

g = -1234567.89

 
 

注意到,如果你要使用NumberStyles,就要添加对System.Globalization的引用,然后就可以使用不同 NumberStyles的组合或者其中的任意一种。如果你想兼容货币符号,就需要使用重载的Parse方法,它们采用了 NumberFormatInfo对象作为一个参数,然后你可以设置NumberFormatInfoCurrencySymbol属性来调用 Parse方法,比如:

 
 

string u = " -1,234,567.890 ";

NumberFormatInfo ni = new NumberFormatInfo();

ni.CurrencySymbol = "";

double h = Double.Parse(u, NumberStyles.Any, ni);

Console.WriteLine("h = {0:F}", h);

 
 

上面的代码有如下输出

 
 

h = -1234567.89

 
 

除了NumberFormatInfo,还可以使用CultureInfo类。CultureInfo代表了某种特定的文化,包括文化的名字,书写的方式,日历的格式。对于某种特定文化的操作是非常普遍的情况,比如格式化日期和排序。文化的命名方式遵从RFC1766标准,使用<语言代码 2>-<国家/地区码2>的方式,其中的<语言代码2>是两个小写的字母,它们来自ISO639-1<国家/地区码2>是两个大写字母,它们来自ISO3166。比如,美国英语是"en-US"。英国英语是"en-GB"。特立尼达和多巴哥英语是"en- TT"。例如,我们可以创建一个美国英语的CultureInfo对象并且基于这种文化将数字转换成字符串。

 
 

int k = 12345;

CultureInfo us = new CultureInfo("en-US");

string v = k.ToString("c", us);

Console.WriteLine(v);

 
 

输出是:

 
 

$12,345.00

 
 

要注意到,我们使用了重载的ToString方法,它把第一个格式化字符串当成第一个参数,将一个CultureInfo对象(执行了IFormatProvider对象)作为第二个参数。这儿有第二个例子,对于丹麦人来说:

 
 

CultureInfo dk = new CultureInfo("da-DK");

string w = k.ToString("c", dk);

Console.WriteLine(w);

 
 

输出是:

 
 

kr 12.345,00

 
 

5 字符串和日期

 
 

一个日期对象有个叫Ticks的属性。它存储了自从公元1年的11号上午12点开始的,以100纳秒为间隔的时间。比如,Ticks值等于 31241376000000000L表示公元100年,星期五,11号,上午12点这一时间。Ticks总是以100纳秒为间隔递增。

 
 

DateTime的值以存储在DateTimeFormatInfo实例里面的标准或者自定义的方式来表示。为了修改一个日期显示的方式,DateTimeFormatInfo实例必须要是可写的,以便我们写入自定义的格式并且存入属性中

 
 

using System.Globalization;

 
 

public
class DatesApp

{

public
static
void Main(string[] args)

{

DateTime dt = DateTime.Now;

Console.WriteLine(dt);

Console.WriteLine("date = {0}, time = {1}\n",

dt.Date, dt.TimeOfDay);

}

}

 
 

代码会产生下面的输出

 
 

23/06/2001 17:55:10

date = 23/06/2001 00:00:00, time = 17:55:10.3839296

 
 

下表列出了标准的格式字符串以及相关的DateTimeFormatInfo属性

 
 

 
 

D

  

  

D

MM/dd/yyyy

ShortDatePattern(短日期模式)

D

dddd,MMMM dd,yyyy

LongDatePattern(长日期模式)

F

dddd,MMMM dd,yyyy HH:mm

Full date and time (long date and short time)(全日期和时间模式)

F

dddd,MMMM dd,yyyy HH:mm:ss

FullDateTimePattern (long date and long time)(长日期和长时间)

G

MM/dd/yyyy HH:mm

General (short date and short time)(通用模式,短日期和短时间)

G

MM/dd/yyyy HH:mm:ss

General (short date and long time)(通用模式,短日期和长时间)

M,M

MMMM dd

MonthDayPattern(月天模式)

r,R

ddd,dd MMM yyyy,HH':'mm':'ss 'GMT'

RFC1123Pattern RFC1123模式)

S

yyyy-MM-dd HH:mm:ss

SortableDateTimePattern (conforms to ISO 8601) using local time(使用本地时间的可排序模式)

T

HH:mm

ShortTimePattern (短时间模式)

T

HH:mm:ss

LongTimePattern(长时间模式)

U

yyyy-MM-dd HH:mm:ss

UniversalSortable-DateTimePattern (conforms to ISO 8601) using universal time(通用可排序模式)

U

dddd,MMMM dd,yyyy,HH:mm:ss

UniversalSortable-DateTimePattern(通用可排序模式)

y,Y

MMMM,yyyy

YearMonthPattern(年月模式)

DateTimeFormatInfo.InvariantInfo属性得到了默认的只读的DateTimeFormatInfo实例,它与文化无关。你可以创建自定义的模式。要注意到的是InvariantInfo不一定和本地的格式一样。Invariant等于美国格式。另外,如果你向 DateTime.Format方法传递的第二个参数是nullDateTimeFormatInfo将会是默认的CurrentInfo。比如

 
 

Console.WriteLine(dt.ToString("d", dtfi));

Console.WriteLine(dt.ToString("d", null));

Console.WriteLine();

 
 

输出是

 
 

06/23/2001

23/06/2001

 
 

对比选择InvariantInfoCurrentInfo的。

 
 

DateTimeFormatInfo dtfi;

Console.Write("[I]nvariant or [C]urrent Info?: ");

if (Console.Read() == 'I')

dtfi = DateTimeFormatInfo.InvariantInfo;

else

dtfi = DateTimeFormatInfo.CurrentInfo;

DateTimeFormatInfo dtfi = DateTimeFormatInfo.InvariantInfo;

Console.WriteLine(dt.ToString("D", dtfi));

Console.WriteLine(dt.ToString("f", dtfi));

Console.WriteLine(dt.ToString("F", dtfi));

Console.WriteLine(dt.ToString("g", dtfi));

Console.WriteLine(dt.ToString("G", dtfi));

Console.WriteLine(dt.ToString("m", dtfi));

Console.WriteLine(dt.ToString("r", dtfi));

Console.WriteLine(dt.ToString("s", dtfi));

Console.WriteLine(dt.ToString("t", dtfi));

Console.WriteLine(dt.ToString("T", dtfi));

Console.WriteLine(dt.ToString("u", dtfi));

Console.WriteLine(dt.ToString("U", dtfi));

Console.WriteLine(dt.ToString("d", dtfi));

Console.WriteLine(dt.ToString("y", dtfi));

Console.WriteLine(dt.ToString("dd-MMM-yy", dtfi));

 
 

输出是

 
 

[I]nvariant or [C]urrent Info?: I

01/03/2002

03/01/2002

 
 

Thursday, 03 January 2002

Thursday, 03 January 2002 12:55

Thursday, 03 January 2002 12:55:03

01/03/2002 12:55

01/03/2002 12:55:03

January 03

Thu, 03 Jan 2002 12:55:03 GMT

2002-01-03T12:55:03

12:55

12:55:03

2002-01-03 12:55:03Z

Thursday, 03 January 2002 12:55:03

01/03/2002

2002 January

03-Jan-02

 
 

 
 

[I]nvariant or [C]urrent Info?: C

03/01/2002

03/01/2002

 
 

03 January 2002

03 January 2002 12:55

03 January 2002 12:55:47

03/01/2002 12:55

03/01/2002 12:55:47

03 January

Thu, 03 Jan 2002 12:55:47 GMT

2002-01-03T12:55:47

12:55

12:55:47

2002-01-03 12:55:47Z

03 January 2002 12:55:47

03/01/2002

January 2002

03-Jan-02

 
 

源文档 <http://www.cnblogs.com/jxnclyk/archive/2010/04/26/1721072.html>

 
 

 
 

 
 

.NET Framework Class Library for Silverlight

2011年10月2日

20:06

 
 

http://msdn.microsoft.com/en-us/library/cc838194%28v=VS.95%29.aspx

 
 

Silverlight类库。NET Framework提供了以下的命名空间,这是详细记录在本参考。

 
 

Microsoft.CSharp.RuntimeBinder

 
 

    包含类型,支持的动态语言运行时(DLR)和C#之间的互操作。

 
 

Microsoft.Internal

 
 

    支持Silverlight的基础设施。NET框架。此命名空间的目的不是要直接从程式码使用。

Microsoft.P​​hone.Data.Linq

 
 

    包含支持在Windows Phone应用程序的本地数据库进行交互的类。

Microsoft.P​​hone.Data.Linq.Mapping

 
 

    包含用来定义并生成一个本地数据库,它表示在一个Windows Phone应用程序的数据上下文类。

Microsoft.VisualBasic

 
 

    包含的类支持在Visual Basic中的Visual Basic运行时。

Microsoft.VisualBasic.CompilerServices

 
 

    包含支持Visual Basic编译器内部使用的唯一类型。

Microsoft.Win32.SafeHandles

 
 

    包含类的安全提供了常见的功能,支持文件和操作系统句柄的处理类的抽象推导。

系统

 
 

    包含基本类和基类定义常用的值和引用数据类型,事件和事件处理程序,接口,属性,以及处理异常。其他类提供服务,支持的数据类型转换,方法参数操作,数学,远程和本地程序调用,应用程序环境管理,托管和非托管的应用程序的监督。

System.CodeDom.Compiler

 
 

    标识是由工具生成的代码包含一个类。

System.Collections

 
 

    包含BitArray类的,是各种集合对象实现的接口,接口和结构,让您提取,枚举和集合中的对象进行比较。

System.Collections.Generic

 
 

    包含定义泛型集合的接口和类。

System.Collections.ObjectModel

 
 

    包含在一个可重用的库的对象模型,可用于为集合类。使用这些类的属性或方法时返回集合。

System.Collections.Specialized

 
 

    包含专业性和强类型集合。

System.ComponentModel

 
 

    提供用于实现运行时和设计时组件和控件的行为的类。

System.ComponentModel.Composition

 
 

    提供类构成的托管扩展框架(MEF)的核心。

System.ComponentModel.Composition.Hosting

 
 

    提供MEF类是有用的可扩展应用程序的开发,或主机。

System.ComponentModel.Composition.Primitives

 
 

    提供MEF编程模型底层的原始类型。

System.ComponentModel.Composition.ReflectionModel

 
 

    提供MEF类型的开发者使用基于反射的编程模型是有用的。

System.ComponentModel.DataAnnotations

 
 

    提供用于定义元数据实体类的属性,类。

System.Configuration.Assemblies

 
 

    包含用于配置程序集的类。

将System.Data.Linq

 
 

    包含支持在Windows Phone应用程序的本地数据库进行交互的类。

System.Data.Linq.Mapping

 
 

    包含用来定义并生成一个本地数据库,它表示在一个Windows Phone应用程序的数据上下文类。

System.Data.Linq.SqlClient

 
 

    包含的类包含查询的辅助方法。

System.Data.Services.Client

 
 

    表示应用程序可以使用WCF数据服务进行交互的类和成员。

System.Data.Services.Common

 
 

    包含一个类,表示一个实体的关键属性或属性。

System.Diagnostics

 
 

    提供类,使您调试应用程序和跟踪代码的执行。

System.Diagnostics.CodeAnalysis

 
 

    包含工具,分析是否符合编码惯例,例如命名或安全规则的代码交互的类。

System.Diagnostics.Contracts

 
 

    包含静态类为代表的先决条件,后置条件和不变量,如程序合同。

System.Diagnostics.Contracts.Internal

 
 

    提供类二进制重写,可以用它来处理合同失败。

System.Diagnostics.SymbolStore

 
 

    提供了一个接口,使您可以访问调试符号信息,如源代码行到MSIL(Microsoft中间语言)地图,。编译器的目标。NET框架为Silverlight程序员的数据库(PDB)文件可以存储到调试符号信息。调试器和代码分析器工具可以在运行时读取调试符号信息。

System.Dynamic

 
 

    提供类和接口,支持的动态语言运行时(DLR)。

System.Globalization

 
 

    包含类定义文化相关的信息,包括语言,国家/地区,使用的日历,日期,货币和数字和字符串的排序顺序的格式模式。这些类编写全球化(国际化)应用程序非常有用。

System.IO

 
 

    包含,使读取和写入数据流的类型。

System.IO.IsolatedStorage

 
 

    包含用于创建和使用虚拟文件系统的类型。独立存储提供安全的部分信任的应用程序客户端存储。在Silverlight中,所有的I / O操作都被限制到隔离储存,不使用的操作系统的文件系统。

System.Json

 
 

    提供基于标准的支持序列化的JavaScript对象符号(JSON)。

System.Linq的

 
 

    包含的类和接口,支持使用语言集成查询(LINQ)的查询。

System.Linq.Expressions

 
 

    包含的类型,使语言级的代码表达式对象中的表达式树的形式表示。

System.Net

 
 

    今天在网络上使用的许多协​​议提供了一个简单的编程接口。 WebRequest和WebResponse类形成的可插拔协议,从而使您能够开发应用程序,使用互联网资源,无需担心个人协议的具体细节的基础上。

System.Net.Browser

 
 

    包含内部和外部的Web浏览器主办,支持基于Silverlight的应用程序的网络通信类。

System.Net.NetworkInformation

 
 

    提供对信息网络的可用性和本地计算机的地址变更通知的访问。

System.Net.Sockets的

 
 

    提供了一个插座网络接口的开发者需要严格控制对网络的访问的托管实现。在Windows上,此命名空间提供的Windows套接字(Winsock)接口的托管实现。在Apple Macintosh OS X中,此命名空间提供了一个管理实施插座接口伯克利软件分发(BSD)UNIX基础。

System.Numerics

 
 

    包含数字类型数字的原始类型,如字节,双,和Int32。NET Framework的定义。

System.Reflection中

 
 

    包含检索程序集,模块,成员,参数,和其他实体在托管代码中,通过检查它们的元数据信息的类型。这些类型也可用于操作加载的类型的实例,例如,挂钩事件或调用方法。

System.Reflection.Emit

 
 

    包含的类,使编译器或工具发出元数据和Microsoft中间语言(MSIL),并选择性地生成一个磁盘上的PE文件。这些类的主要客户是脚本引擎和编译器。

System.Resources

 
 

    提供类和接口,使开发人员能够创建,存储和管理特定应用程序中使用的各种文化资源的。

System.Runtime.CompilerServices

 
 

    提供的编译器的编写者使用托管代码来在元数据中指定的属性,影响公共语言运行库的运行时行为的功能。

System.Runtime.ConstrainedExecution

 
 

    定义一个类型,以确保终结代码标记为关键。该类型的目的是用于约束的执行区域(CER的)。

System.Runtime.ExceptionServices

 
 

    提供先进的异常处理类。

System.Runtime.InteropServices

 
 

    提供多种支持COM Interop和平台调用服务的成员。

System.Runtime.InteropServices.Automation

 
 

    提供基于Silverlight的应用与自动化API进行互操作的类,使。

System.Runtime.Serialization

 
 

    包含可用于序列化和反序列化对象的类。序列化是将转换为一个字节的存储或传输到另一个位置的线性序列的对象或对象图的过程。反序列化是中存储的信息和从它重新创建对象的过程。

System.Runtime.Serialization.Json

 
 

    包含对象的JavaScript Object Notation(JSON)的序列化和反序列化JSON对象的类型。

System.Runtime.Versioning

 
 

    包含先进的类型,支持的版本为Silverlight的。NET框架的侧端实现。

System.Security

 
 

    提供Silverlight安全系统。NET框架的基本结构。

System.Security.Cryptography

 
 

    提供的加密服务,包括安全的数据编码和解码,以及许多其他操作,如散列,随机数生成,和消息认证。

System.Security.Cryptography.X509Certificates

 
 

    包含公共语言运行时执行的Authenticode X.509 v.3证书。这个证书是一个独特和积极的标识证书持有者的私钥签署。

System.Security.Permissions

 
 

    定义业务和基于策略的资源访问控制的类。此命名空间NET Framework的支持Silverlight的基础设施,其类型是应用程序代码访问。

System.Security.Principal

 
 

    定义的主要对象,表示下的代码运行的安全上下文。

System.ServiceModel

 
 

    包含必要建立基于Silverlight客户端应用程序可用于访问分布式应用程序的类型。

System.ServiceModel.Channels

 
 

    包含需要构造和修改客户端使用的沟通与服务的信息的类型,用来交换信息的渠道类型,通道工厂,用于构建这些渠道,以及用于配置的绑定元素。

System.ServiceModel.Description

 
 

    包含所需的构造和修改服务,合同,用来构建服务运行时,导出元数据的端点描述类型。

System.ServiceModel.Dispatcher

 
 

    包含需要修改客户端应用程序运行时执行的行为的类型。

System.ServiceModel.Security

 
 

    处理一般Silverlight安全相关的主题包含的类。

System.ServiceModel.Syndication

 
 

    包含Silverlight的联合对象模型的类型,使。

System.ServiceModel.Web

 
 

    包含类的Web HTTP编程模型。

System.Text

 
 

    包含类表示Unicode和UTF - 8字符编码转换字符和字节的块的块的抽象基类;和一个辅助类,操纵和格式的String对象而不创建String的中间实例。

System.Text.RegularExpressions

 
 

    包含的类提供的。NET框架正则表达式引擎的访问。命名空间提供了正则表达式的功能,可以从任何平台或语言。NET框架内运行。

的System.Threading

 
 

    提供多线程编程的类和接口,使。

System.Windows

 
 

    提供总体框架介绍Silverlight客户端类,以及许多Silverlight演示功能的基类。这些课往往类似于类的Windows Presentation Foundation(WPF)的存在。

System.Windows.Automation

 
 

    包含的类提供支持Silverlight的UI自动化客户端。

System.Windows.Automation.Peers

 
 

    定义的AutomationPeer基类和从它派生的类型和对应的Silverlight控件。每个AutomationPeer公开相应的Silverlight的UI自动化控制。

System.Windows.Automation.Provider

 
 

    包含用于创建UI自动化提供的接口。

System.Windows.Automation.Text

 
 

    包含指定文本格式和Silverlight的UI自动化的相关行为的类型。

System.Windows.Browser

 
 

    包含的类,使托管代码和基于Silverlight的应用程序中的JavaScript之间的相互作用。此功能被称为HTML Bridge功能。

System.Windows.Controls

 
 

    包含的类创建控件,使用户能够与应用程序交互。

System.Windows.Controls.Primitives

 
 

    包含基类和控制,是为了作为其他更复杂的控制的一部分。

System.Windows.Data

 
 

    包含用于数据源的绑定属性的类。

System.Windows.Documents

 
 

    包含的类支持Silverlight中的基本文件概念。

System.Windows.Ink

 
 

    提供交互和操作油墨在Silverlight的类。

System.Windows.Input

 
 

    包含的类支持基于Silverlight的应用程序中输入。

System.Windows.Interop

 
 

    包含的类提供Silverlight插件的属性,否则在宿主浏览器的HTML DOM存在的管理代码暴露。

System.Windows.Markup

 
 

    包含的类支持扩展应用程序标记语言(XAML)在Silverlight中处理。

System.Windows.Media

 
 

    包含类,使丰富的媒体,包括图纸,文字,音频/视频内容基于Silverlight的应用,整合。

System.Windows.Media.Animation

 
 

    包含类的支持属性动画功能,包括时间表,故事,和关键帧。

System.Windows.Media.Effects

 
 

    提供适用于位图图像的视觉效果,可用于的类型。

System.Windows.Media.Imaging

 
 

    包含位图图像进行编码和解码的类。

System.Windows.Media.Media3D

 
 

    包含支持矩阵/ Silverlight中的角度介绍的类型。

System.Windows.Messaging

 
 

    提供支持创建多个基于Silverlight的应用程序之间的本地消息渠道的类型。

System.Windows.Navigation

 
 

    提供类型,支持导航。

System.Windows.Printing

 
 

    提供打印支持和基于Silverlight的应用程序的打印对话框访问..

System.Windows.Resources

 
 

    包含一个类,提供信息资源的应用程序资源,或通过Application.GetResourceStream获得的其他包流。

System.Windows.Shapes

 
 

    包含的基本形状,可用于扩展应用程序标记语言(XAML)或代码库。还包括路径的类,它可以加载路径数据通过一个对象模型或内联格式描述的复合几何。

System.Windows.Threading

 
 

    包含的类支持的Silverlight线程系统。

System.Xml的

 
 

    提供用于处理XML的基于标准的支持。

System.Xml.Linq的

 
 

    包含LINQ to XML的,这是一个内存中的XML编程接口,使您能够轻松有效地修改XML文档的类型。

System.Xml.Resolvers

 
 

    包含类提供支持与DTD或XML流prepopulating缓存。

System.Xml.Schema

 
 

    包含提供基于标准的XML架构定义语言(XSD)架构的支持的XML类。

的System.Xml.Serialization

 
 

    包含用于对象序列化为XML格式文件或流的类。

System.Xml.XPath

 
 

    包含定义一个游标模型,用于导航和编辑XML信息的类型。

System.Xml.Xsl

 
 

    提供支持可扩展样式表转换(XSLT)转换。

 
 

批注常见问题

这里显示的类是从"核心"的Silverlight程序集,和SDK的组件

来自两个可能的集会贡献者套类的设置显示在类库这里。

 
 

第一组是Silverlight的"核心"集会 - 当他们安装Silverlight运行时,每一个客户机上安装的组件。这种组件的例子是System.Windows(这包含大部分的客户端UI类),系统和mscorlib程序。

 
 

第二组是SDK的组件。这些都是安装当您安装Silverlight工具安装程序链接器,在安装SDK的组件。这种组件的例子是System.Windows.Controls和System.Xml.Linq的。要使用这些功能,通常必须加入一个参考项目中的大会;默认的Silverlight项目不包括他们。添加一个SDK大会部署的后果,通常包含您的XAP包负责payloading SDK库DLL客户端;详见http://msdn.microsoft.com/en-us/library/cc838194(与95)。ASPX。

 
 

你不会看到这里列出的是从"Silverlight工具包"中的类。工具包的详细信息,请参阅http://www.codeplex.com/Silverlight

 
 

1.What's New in Silverlight 4

2011年10月2日

10:37

 
 

源文档 <http://msdn.microsoft.com/en-us/library/dd772166(v=VS.95).aspx>

 
 

Controls

 
 

Viewbox Control: 自适应

WebBrowser Control:网页控件

WebBrowserBrush Control:形状显示网页

 
 

Out-of-Browser

 
 

  • Window 增加运行时拉伸,最顶端,关闭事件
  • 支持 offline digital rights management (DRM).
  • WebBrowser 控件.
  • NotificationWindow 弹出警告类.
  • 支持信任提升.
  • 更好的调试 out-of-browser 程序

    更多

     
     

    Trusted Applications

    配置的浏览器应用程序提升信任。可以绕过一些Silverlight的安全沙箱并与本机功能集成。例如,浏览器应用程序在运行提升的信任可以读取和写入用户文件夹中的文件,并使用全屏模式,没有键盘的限制。

     
     

    此外,受信任的应用程序可以访问Windows的API,使完全定制的浏览器应用程序的窗口。例如,受信任的应用程序,可以隐藏窗口的标题栏和边框,并提供自定义用户界面元素的移动,调整大小,或关闭窗口。

     
     

    给用户在安装前,受信任的应用程序显示一个安全警告。Silverlight支持信任的应用程序签署,并显示验证签名的应用的警告。

     
     

    欲了解更多信息,请参阅信任的应用程序System.IO

     
     

    Late Binding

    Silverlight现在支持在Visual Basic和C#的后期绑定。 Visual Basic支持后期Object类型的变量的默认绑定。 C#支持动态类型的变量晚期绑定。这使您能够更方便地检索的对象从HTML DOM或自动化API。

     
     

    为了支持后期绑定到HTML DOM元素,现在ScriptObject类实现IDynamicMetaObjectProvider接口。为了支持后期绑定自动化API,AutomationFactory类及相关类已被添加到Silverlight框架。

     
     

    有关自动化的详细信息,请参见如何:使用受信任的应用程序的自动化

     
     

    Media

     
     

    Webcam and Microphone

    现在,你可以从用户的音频设备或视频设备捕获源输入。 CaptureImageAsync方法使一个简单的屏幕捕获的情况下,VideoBrush.SetSource方法使一个简单的视频播放场景。更高级的方案可以访问原始音频或视频,并加工成文件格式。摄像头和麦克风捕捉都使用水槽的比喻,为建立一个监听器类,并获得一个捕获需要捕获设备接入的客户端用户权限。欲了解更多信息,请参见CaptureSourceAudioSinkVideoSink和摄像头和设备概述

     
     

     
     

No comments: