制作天津理工课表WP7版的总结

这是一个抓取学校教务网站课表信息的小应用,总体来说比较简单,但是制作过程中还是遇到了几个问题,在这里和大家交流分享一下。

第一个是web数据的传输,在wp7中不支持GetResponse这样同步获取响应数据的,只能以异步传输的形式完成。这个问题是当时在cmd里测试不会发现的,后来查询了一些资料,获取web数据需要通过异步的方法获取响应数据。

Uri myurl = new Uri(strrequesturl);
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(myurl);
webRequest.Method = "GET";
webRequest.BeginGetResponse(new AsyncCallback(handleResponse), webRequest);
/// <summary>
/// 异步响应回调函数
/// </summary>
/// <param name="asyncResult">异步请求参数</param>

private
void handleResponse(IAsyncResult asyncResult) { string result = ""; bool iserror = false; try { HttpWebRequest webRequest = asyncResult.AsyncState as HttpWebRequest; HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult); Stream streamResult = webResponse.GetResponseStream(); //获取响应流 StreamReader reader = new StreamReader(streamResult); result = reader.ReadToEnd(); } catch (Exception ex) { iserror = true; result = ex.Message; }     }

这里提醒一下大家,网上有的示例会用allDone.WaitOne()和allDone.Set()的方法来等待异步回调线程,实测WaitOne会让主线程停掉,整个程序呈假死状态。如何等待异步传回来的数据成了我不知如何解决的问题。本应用是在获取数据之后进行页面跳转,无奈只好将跳转语句写在了回调函数里......这肯定有破坏我获取数据的类的结构,如果有大神知道解决方法请告诉小弟。

第二个问题是关于hubtiles这个控件的,我需要用这个控件来显示课表的信息,网上关于hubtiles的文章貌似都是同一篇(http://www.cnblogs.com/xingfuzzhd/archive/2011/11/18/2254419.html),这篇文章说实话,你要了解的最基础的东西里面都有。但是对于我的需求来说,首先我不需要显示图片,第二我需要在hubtile上显示3种信息(第几节课,课程名,上课地点),第三hubtile的默认翻转太慢,缺乏互动性,而且有个state的文字是倒着的。

于是我开始对hubtile进行样式上的修改。

在hubtile控件上右键选择编辑模板-编辑副本

由于Border里的那个TextBlock默认绑定的是title,这样的话,我们只能显示title和Message两种信息,而我需要的是tile、Message、Notification,这个怎么办呢,hubtile属性里有一个DisplayNotification,给他设置为true,Notification就可以显示了,但是这样的话Message就没了,我们把模板中Border下的TextBlock绑定为Message就可以同时显示三个信息。

我现在需要tile只显示两种状态,一个是(状态A),一个是(状态B),对状态删删减减之后变成了这个样子。

当然两种状态之间的转化是有上下浮动的动画的。

不过至今我不知道在哪里去改hubtile自动切换状态的间隔时长。。。。。。

下面就是增加交互性,进入课表,同学们看到的tile状态是A,当点击tile之后,变为B状态显示当节课的具体信息。我们在hubtile的属性里加入Tap事件,给tile的tag赋为0,IsFrozen设为True。在Tap事件中加入以下代码:

private void hubtile_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            HubTile hubtile = sender as HubTile;
            if (hubtile.Tag.Equals("0"))
            {
                VisualStateManager.GoToState(hubtile, "Collapsed", true);
                hubtile.Tag = "1";
            }
            else
            {
                VisualStateManager.GoToState(hubtile, "Expanded", true);
                hubtile.Tag = "0";
            }
        }

这样我们就能像按开关一样控制hubtile了。

第三个问题说一下数据绑定,数据绑定可以参考我上面说的那篇文章,不过做这个应用时我有点犯二,我绑定时对Name也进行了绑定,这样VS会报出一个无效指针的错误,希望大家可以注意。

 <ListBox x:Name="tileList1" Margin="8,8,45,78">
                        <ListBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <toolkit:WrapPanel Orientation="Horizontal"/>
                            </ItemsPanelTemplate>
                        </ListBox.ItemsPanel>
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <toolkit:HubTile Style="{StaticResource HubTileStyle}" Title="{Binding Title}"  IsFrozen="True"  Margin="3" Notification="{Binding Notification}"
                                                 DisplayNotification="True" Message="{Binding Message}" GroupTag="{Binding GroupTag}" Tap="hubtile_Tap" Tag="0">
                                    <toolkit:HubTile.Background>
                                        <ImageBrush Stretch="Fill" ImageSource="images/tileBg.png"/>
                                    </toolkit:HubTile.Background>
                                </toolkit:HubTile>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
public class TileItem
    {
        public string Title { get; set; }
        public string Notification { get; set; }
        public string Message { get; set; }
        public string GroupTag { get; set; }
    }

void InitializeItem(ListBox titleList,int weekNum)
        {
            List<TileItem> tileItems = new List<TileItem>();
            int nowWeek = GlobleTTdata.weekNum;
            #region 

            for (int i = 0; i < 6;i++ )
            {
                TileItem tileitem = new TileItem();
                tileitem.Message = (i * 2 + 1).ToString() + "-" + (i * 2 + 2).ToString() + "";
                tileitem.GroupTag = "MondayTile";
                switch (myTT[weekNum, i].ClassCount)
                {
                    case 0:
                        tileitem.Title = "无课";
                        tileitem.Notification = "";
                        break;
                    case 1:
                        if (myTT[weekNum, i].ClassWeek[0].Contains(nowWeek))
                        {
                            tileitem.Title = myTT[weekNum, i].TTName[0];
                            tileitem.Notification = myTT[weekNum, i].ClassAddr[0];
                        }
                        else
                        {
                            tileitem.Title = "无课";
                            tileitem.Notification = "";
                        }
                        break;
                    case 2:
                        if (myTT[weekNum,i].ClassWeek[0].Contains(nowWeek))
                        {
                            tileitem.Title = myTT[weekNum, i].TTName[0];
                            tileitem.Notification = myTT[weekNum, i].ClassAddr[0];
                        }
                        else if (myTT[weekNum, i].ClassWeek[1].Contains(nowWeek))
                        {
                            tileitem.Title = myTT[weekNum, i].TTName[1];
                            tileitem.Notification = myTT[weekNum, i].ClassAddr[1];
                        } 
                        else
                        {
                            tileitem.Title = "无课";
                            tileitem.Notification = "";
                        }
                        break;
                }
                tileItems.Add(tileitem);
            }
            #endregion
            titleList.ItemsSource = tileItems;
        }


应用的下载地址:http://pan.baidu.com/share/link?shareid=132879&uk=2382737209 不过相信大多数博友没有我们学校教务网的账号。。。。。。

欢迎访问倾剑飞血的更多博文:http://www.cnblogs.com/jacklandrin/

同时,欢迎大家来拍砖~

转载于:https://www.cnblogs.com/jacklandrin/archive/2012/11/11/2765139.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值