none
Silverlight 2的变化(Breaking Changes in Silverlight 2)之二 RRS feed

  • 常规讨论

  • Silverlight 2的变化(Breaking Changes in Silverlight 2)
    发布于:2008-06-06 15:45:29 作者:works guo 来源:www.cnblogs.com 访问:17次 文字:


    (7)新功能支持HttpWebRequest/HttpWebResponse

    1.支持HTTP/HTTPS 请求
    2.支持Web Services场景中的min-bar
    a.GET/POST 方法
    b.关于GET/POST请求:设置标准headers没有暗示.
    c.关于GET/POST请求:设置自定义 headers
    d.关于响应:读取内容类型
    3.关于响应:得到OK或NotFound error代码
    4.为可靠的网络特性平衡浏览器堆(Leverage browser stack for certain networking features)
    a.Basic, digest, ntlm, & cookie基于身份验证的场景
    b.代理探测,数据压缩,缓存.
    5.只支持同步请求且只支持他们在UI线程下.


    (8)PresentationFrameworkCollection<T> 的变化

    所以当你使用Add(object)后放进IList中时PresentationFrameworkCollection<T> 现在使用隐式接口实现来实现IList,

    Before

    collection.Add(myobject);

    Now

    collection.Add ( (GradientStop) myobject);
    or
    IList list 
    = (IList) collection;
    list.Add(myobject);


    (9)Mouse 和 Keyboard API 的变化

    你现在使用Key 枚举(KeyEventArgs.Key property)代替一个整数类型

    KeyboardEventHandler/Args 现在是 KeyEventHandler/Args

    MouseLeftButtonDown and MouseLeftButtonUp时间现在的类型是MouseButtonEventHandler/Args(其他鼠标事件保留,没有变化).

    访问修饰符键(键盘的键)的状态(args.Shift/Control,等)现在是通过使用static Keyboard.Modifiers API,并且能在键盘事件外使用.
    MouseEventArgs.Ctrl和MouseEventArgs.Shift 已经被删除.

    Cursors 枚举已经被转变成一个Cursors类并且一个static Cursors类被多个cursors(arrow,Hand)填充,这里特别是Canvas.Cursor=Cursors.Hand将继续被使用.Cursors.Default已经被替换为null.但它的XAML保留没有改变,所以Cursor="Default"继续工作在XAML中.

    这是一个示例:
    之前
    canvas.MouseLeftButtonUp += new MouseEventHandler(onClick);

    void onClick (object sender, MouseEventArgs e) {
        Canvas cc 
    = sender as Canvas;
        SolidColorBrush sb 
    = new SolidColorBrush();
        sb.Color 
    = Colors.Red;
        cc.Background 
    = sb;         
    }


    Canvas.KeyUp 
    += new KeyboardEventHandler(onKeyUp);

    Void onKeyUp(
    object sender, KeyboardEventArgs e){
       
    if (e.Key == 12return
       
    bool isShiftPressed = e.Shift;

       
    if (isShiftPressed) {
             canvas.Cursor 
    = Cursors.Default;
        }

    现在
    canvas.MouseLeftButtonDown += new MouseButtonEventHandler(onClick);

    void OnClick(object sender, MouseButtonEventArgs e) {
        Canvas cc 
    = sender as Canvas;
        SolidColorBrush sb 
    = new SolidColorBrush();
        sb.Color 
    = Colors.Red;
        cc.Background 
    = sb;         
    }


    Canvas.KeyUp 
    += new KeyEventHandler(onKeyUp);

    Void onKeyUp(
    object sender, KeyEventArgs e){
        
    if (e.Key == Key.A) return;
        Bool  isShiftPressed 
    =  
        ( ( Keyboard.Modifiers 
    & ModifierKeys.Shift) == ModifierKeys.Shift);
        
    if (isShiftPressed) {
             canvas.Cursor 
    = null;
        }

    }


    (10)改变TextBlock 和 它的Helper Classes

    TextBlock.FontFamily属性已经从字符串类型转换成FontFamily类型.
    之前
    textblock.FontFamily = "Arial";
    现在
    textblock.FontFamily = new FontFamily("Arial");

    其他的变化:

        FontWeights枚举已经已经转入FontWeight类并且一个static FontWeights类由多个weights填充,这里特别的是textblock.FontWeight = FontWeights.Bold 仍然继续使用.

        FontStyles枚举已经已经转入FontStyle类并且一个static FontStyles类由多个Styles填充,这里特别的是textblock.FontStyle = FontStyles.Italic仍然继续使用.

        FontStretches枚举已经已经转入FontStretche类并且一个static FontStretches类由多个Stretches填充,这里特别的是textblock.FontStretch = FontStretches.Expanded 仍然继续使用.

        TextDecorations枚举已经已经转入TextDecoration类并且一个static FontStretches类由多个TextDecorations填充,这里特别的是textblock.TextDecoration = TextDecorations.Underline 仍然继续使用.
       

    (11)XML DTD API 的变化和默认的XmlResolver
        改变操作XML的API引入支持DTD分解功能更好的支持新的XmlXapResolver和XmlPreloadedResolver.这样的改变将会进入所有受权支持DTD支持XmlReader的代码都被.除这些外,XmlXapResolver已经添加像默认的为XmlReader样的resolver.

    API 的改变
    下面是当一个被加载Xml文件内容中有DTD时,API在操做DTD允许DTD被忽视的情况.
        1.添加XmlResolver 如果Uri能用type参数的实例来表示那public virtual bool SupportsType(Uri uri, Type type)这个方法返回类型为true.只有为Stream,基类的实现返回值才为true.

        2.添加DtdProcessing enumeration 当XmlReader遇到一个DTD时DtdProcessing enumeration允许展开动作.这个枚举有下面值:Parse, Ignore,和Prohibit.

        3.删除XmlReaderSettings.ProhibitDTD属性 这个属性是DtdProcessing属性的补充.

        4.添加XmlReaderSettings.DtdProcessing属性 当DtdProcessing property 已经添加遇到DTD时允许有相应动作.默认值为Prohibit时与变化之前有同样的行为.
    之前
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver 
    = resolver;settings.ProhibitDtd = false;
    XmlReader reader 
    = XmlReader.Create("fileInXap", settings);
    现在
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver 
    = resolver;settings.DtdProcessing = DtdProcessing.Parse;
    XmlReader reader 
    = XmlReader.Create("fileInXap", settings);
    or
    XmlReaderSettings settings 
    = new XmlReaderSettings();
    settings.XmlResolver 
    = resolver;settings.DtdProcessing = DtdProcessing.Ignore;
    XmlReader reader 
    = XmlReader.Create("fileInXap", settings);


    (12)XamlReader.Load() 需要xmlns

    XamlReader.Load(“<Canvas/>”);
    现在
    XamlReader.Load("<Canvas xmlns="http://schemas.microsoft.com/client/2007"/>");

    为按照XML规则运行,XamlReader.Load()现在需要你在你的XAML文件中指定一个xmlns.

    (13)托管的FontSource(downloader)签名被移出

    这个构造器在托管代码中获得的是一个downloader被删除.现有的FontSource构造器获得的是一个流.

    你应该选择使用WebClient类下载font和使用WebClient提供的stream.
    TextBlock tb = this.FindName("tb");
    tb.FontSource = new FontSource(myDownloader);
    现在

    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
    TextBlock tb = this.FindName("tb");
    tb.FontSource = new FontSource(e.Result);
    }


    (14)XmlResolver的变化

    默认的XmlResolver现在是XmlXapResolver,能从应用程序的XAP中加载文件.允许从XAP中加载一个Xml文件不需要创建一个XmlReaderStrings实例.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver 
    = resolver;XmlReader reader = XmlReader.Create("fileInXap", settings);
    orXmlReaderSettings settings 
    = new XmlReaderSettings();
    settings.XmlResolver 
    = resolver;
    XmlReader reader 
    = XmlReader.Create("fileInXap", settings);
    XDocument doc 
    = XDocument.Load(reader);
    现在
    XmlReader reader = XmlReader.Create("fileInXap");orXDocument doc = XDocument.Load("fileInXap");

    还有这个变化是,
    1.XmlResolver已经添加
    2.XmlXapResolver:当引用一个Xml文件时这个resolver允许从一个XAP文件加载内容.
    XmlPreloadedResolver:这个Resolver包括XHTML和RSS DTDs,更好能添加另外的DTDs进入预先加载到缓存.

    My blog: http://blog.csdn.net/dotfun http://dotfun.cnblogs.com

    My contact: QQ:372900288 E-mail:372900288@qq.com msn:sellnet007@hotmail.com

    2009年3月11日 7:05
    版主