在uwp應用開發中,我們常常有向使用者傳送一些提示性訊息的需求。這種時候我們一般會選擇messagedialog、contentdialog或者toastnotification來完成功能。
但是,我們大多數時候僅僅是需要在應用內向使用者顯示一條提示訊息(例如「登入成功!」),不需要使用者對這條訊息做出處理,在這種情況下這幾種方法都不算是很好的解決方式,它們不夠輕量,也不夠優雅,甚至會阻斷使用者的當前操作,這是我們所不期望的。
如果有安卓平台開發經驗的開發者,可能會想到toast元件。對,為什麼uwp平台沒有類似toast的輕量級應用內訊息提示元件呢?
現在,讓我們來實現乙個uwp可用的toast元件。
先放一張效果圖:
在之前《[uwp]使用popup構建uwp picker》中我們講了picker的實現過程,其中利用到的主要呈現手段就是popup
。而我們在這裡想要構建乙個**中呼叫的訊息通知元件,也可以採用同樣的方式來實現。
toast的主要功能是呈現通知,所以我定義了下面幾個依賴屬性來控制:
在呈現邏輯上使用乙個popup
作為載入toast的容器。這裡的邏輯非常簡單,我直接貼出**來,大家一看就能懂。
核心**如下:
public class toast : control
; window.current.sizechanged += current_sizechanged;
}public timespan duration
public string content
private void current_sizechanged(object sender, windowsizechangedeventargs e)
public async void show()
;await task.delay(duration);
popup.child = null;
popup.isopen = false;
window.current.sizechanged -= current_sizechanged;}}
上面**中,我在建構函式裡為toast控制項新增了乙個預設的隱式動畫entrancethemetransition
,使它呈現出來的時候不會顯得太生硬。
toast控制項的預設樣式:
看起來挺長的一句**,其實就是通過toast.maketext()
靜態方法建立了乙個新的toast
,然後呼叫其show()
方法讓它出現在手機螢幕上。
在這裡,我們也可以直接建立乙個toast
,呼叫其show()
方法呈現。
或者也可以建立乙個toasthelper
靜態類來更方便的使用toast元件:
public static class toasthelper
toast.show();}}
我們可以在自己的應用裡為toast元件新建乙個資源字典,然後將自定義的樣式新增在其中,例如:
xmlns=""
xmlns:x=""
xmlns:local="using:hhchaostoolkit.sample"
使用時,我們只需要為toast控制項設定預定義的樣式即可,或者在我們上面寫的toasthelper
類中增加呼叫自定義樣式toast的靜態方法:
public static void sendcustomtoast(string content, timespan? duration = null)
toast.show();
}
toast元件是我的開源專案hhchaostoolkit專案中的一部分,其中還有乙個與toast原理差不多的元件waitingdialog,原理是一樣的,之後不會再單獨寫博文贅述了。
這篇博文到此結束,謝謝大家閱讀!
乙個輕量級AOP的實現(開源)
事先宣告,本專案參考aop in c 和園內大神張逸的文章,思路神馬的都不是自己的!為了讓專案的 看起來更乾淨,需要乙個aop!於是就實現了乙個非常簡單的,非常輕量級,有多輕量級呢?實現的aop叫做earthworm 蚯蚓,為什麼叫這個?因為它小,它會疏通!專案的本意也是這樣,所以就叫這個!命名空間...
peewee 乙個輕量級的ORM 四
class database last insert id cursor,model parameters return type 最後乙個插入的記錄的那行的主鍵,不一定非得叫 id rows affected cursor return type 受影響的行數 create table model...
DI php寫乙個輕量級的容器
摘要 理解什麼是di ioc,依賴注入 控制反轉。兩者說的是乙個東西,是當下流行的一種設計模式。大致的意思就是,準備乙個盒子 容器 事先將專案中可能用到的類扔進去,在專案中直接從容器中拿,也就是避免了直接在專案中到處new,造成大量耦合。取而代之的是在專案類裡面增設 setdi 和getdi 方法,...