WP7 ListBox 列表項漸顯載入動畫

2022-05-07 14:30:08 字數 1984 閱讀 6737

在wp7程式中,當程式功能越來越複雜時,效能問題是我們不得不考慮的乙個問題。在聊天列表中,如果聊天項過多,而且專案ui元件足夠複雜時,

我們不得不想盡辦法讓ui盡快載入。所以有一種可行的方案,就是像qq聊天列表一樣,從上至下,列表項逐一載入(載入完第一項,再載入第二項,再載入第三項,給使用者盡快的ui響應,也不至於等待到顯示所有的列表項。

在我們的例子中,我還給每個列表項顯示的過程中加入了漸顯動畫,這樣當列表項足夠複雜時,也能表現出比較好的展示效果。

實現的基本原理:

實現的原理也不難,主要的思路是:

1.列表項原本只是乙個簡單的自定義contentcontrol(codewp7itemcontainer),等到合適的時機再載入他的content(codewp7listboxitem);

2.使用乙個管理類loadservice,對ui列表項的載入進行控制,當載入了一項後,再進行第二項的載入,再進行第三項的載入....。

3.給每乙個實際的列表項的顯示加入漸顯動畫。

開始看我們的實現吧:

listitemobject: 列表的實際資料

public

class listitemobject

複製**

loadservice的佇列控制實現

routedeventhandler itemloaded;

listloaditems = new list();

object loadarraylock = new

object();

//當uiload佇列中 全部ui load成功,會**這個函式

public

event routedeventhandler loadedcomplete;

public

void pushloadaction(uiloadaction loadaction)

if (loaditems.count <= 1)

}private

void poploadaction()

return;

}mele.dispatcher.begininvoke(() =>

return;}//

log.d(tag, "loadaction array size:"+loaditems.count);

action = loaditems[0];

action(item_loaded);

"pop");

loaditems.removeat(0);

}});

}void item_loaded(object sender, routedeventargs e)

複製**

對於每一項加入漸顯動畫

private storyboard getloadstoryboard()

;ret = new storyboard();

doubleanimation animationopacity = new doubleanimation ;

storyboard.settarget(animationopacity, this);

storyboard.settargetproperty(animationopacity, new propertypath(uielement.opacityproperty));

ret.children.add(animationopacity);

return ret;

}

複製**

將資料流轉換為byte,recording中即為音訊資料

byte recording = audiostream.toarray();

//獨立儲存檔案處理

}catch (exception ex)

WP7 關於ListBox控制項的資料繫結

listbox是乙個列表控制項,列表中的每乙個項可以是任意的物件 object 我們可以通過模板來定義每乙個項的顯示和資料 下面介紹listbox的模板的定義,和資料繫結 1 定義乙個listbox控制項,先看 listbox horizontalalignment left margin 10,1...

WP7 模擬 選擇框列表 效果

對wp7系統裡自帶的動畫效果很感興趣,看到了 乙個 checkboxlist 自己起的名字,呵呵 顯示隱藏checkbox的效果 比如wifi的高階設定選項列表 於是簡單模仿下。首先建立乙個工程,然後新增乙個自定義控制項。起名字 checkboxlistitem.下面開始在這個自定義控制項裡組裝零件...

tkinter之listbox列表控制項

listbox列表控制項 import tkinter as tk window tk.tk window.title my window 設定視窗的名字 window.geometry 240x260 設定視窗大小 var1 tk.strin ar 設定變數 l tk.label window,b...