UWP 實現乙個輕量級的應用內訊息通知控制項

2022-02-20 23:08:17 字數 2043 閱讀 4429

在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 方法,...