zoukankan      html  css  js  c++  java
  • WCF+Silverlight一个简单的RSS阅读器(二)

    1. 嘿嘿,坚持不懈,继续我的Silverlight之旅,创建了WCF服务,我们需要的是通过Silverlight能够应用这个服务,

             比起2005,2008的服务引用做的好多了,上图:

            image

       通过右边的Discover按钮,可以搜索系统中的WebService服务,我们的RSSService当然也在此列之中,选中起个名字RSSService吧。

    2.有个可以使用的服务,下面就是要提供界面了,遵循传统的方式,选用LisbBox来列出前20项最新的标题,Expression Blend2+sp1可是要必备,

       这东西设计起来比VS2008要好多了,不过BUG也很多,量大的时候容易死机。上图:

    image

    为了能放置在公告栏上,特意设计成200*300的大小,此时布局带来了大问题,昨天晚上搞了一晚上都没有办法是控件位置移动到最左端,

    早上尝试了一下,一定要Rebuid才行,这个Build是无法将修改的布局应用上去的。不过放到博客上去,他还是往中间移。头大了。

    3.最关键的东西来了,就是怎么显示内容了,还是传统写法获得数据填充一下:

      a)WebService的调用,

    RssService.RssServiceClient rssClient = new SilverlightApplication2.RssService.RssServiceClient();
      rssClient.GetRssItemsCompleted +=new EventHandler<SilverlightApplication2.RssService.GetRssItemsCompletedEventArgs>(rssClient_GetRssItemsCompleted);
              rssClient.GetRssItemsAsync("http://www.codeproject.com/webservices/articlerss.aspx?cat=1");
        

    注意:千万别忘了最后一句rssClient.GetRssItemAsync().

      b)对事件的响应:

    void rssClient_GetRssItemsCompleted(object sender, SilverlightApplication2.RssService.GetRssItemsCompletedEventArgs e)
            {

    try
               {
                   ObservableCollection<RssItem> rssItems = e.Result;
                   for (int i = 0; i < rssItems.Count; i++)
                   {
                       ListBoxItem item = new ListBoxItem();
                       item.Style = (Style)Application.Current.Resources["AppRssItemStyle"];
                        item.Content = rssItems[i].Title;
                       item.Tag = rssItems[i];
                       item.MouseLeftButtonUp += new MouseButtonEventHandler(item_MouseLeftButtonUp);
                        this.lstItems.Items.Add(item);
                     }
               }
               catch (Exception ex)
               {
                   ListBoxItem item = new ListBoxItem();
                   item.Style = (Style)Application.Current.Resources["AppRssItemStyle"];
                   item.Content = ex.Message;
                   this.lstItems.Items.Add(item);
               }

    }

    这里和传统变程的区别是,首先要自定义ListBoxItem类,建立他的样式,建立他的事件,然后添加到listbox中去。

    c)Item对事件的响应

    void item_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
           {
               ListBoxItem item = (ListBoxItem)sender;
               RssItem rssItem =(RssItem) item.Tag;
               if (rssItem != null)
               {
                   item.Content = rssItem.Link;
                   if (HtmlPage.IsPopupWindowAllowed)
                   {
                       HtmlPage.PopupWindow(new Uri(rssItem.Link), null, null);
                   }
                   else
                   {
                       HtmlPage.Window.Navigate(new Uri(rssItem.Link));
                   }

               }
               item.Background.SetValue(Brush.OpacityProperty, 50.0);
           }

      item.Background.SetValue(Brush.OpacityProperty, 50.0);将背景的透明度设置为50,和传统的方法不同在Silverlight中设置

    值一般都需要SetValue的方法,同时需要知道DependancyProperty,这个需要对各个属性有一定的了解。

     

    1. 明天我会继续写如何设置样式,使用State,和动画。
  • 相关阅读:
    Java多线程:线程与进程
    Java多线程:线程间通信之volatile与sychronized
    Java基础:内存模型
    Windows10 ubuntu子系统的启用即基础配置
    Java基础:Java虚拟机(JVM)
    前序,中序,后序问题
    Java枚举enum以及应用:枚举实现单例模式
    Java外部类可以访问内部类private变量
    Java单例模式(Singleton)以及实现
    Java构造器:级联调用,调用兄弟构造器
  • 原文地址:https://www.cnblogs.com/wanghualiang/p/1357237.html
Copyright © 2011-2022 走看看