在WPF的頁(yè)面中我們肯定會(huì)遇到這樣的需求:彈出一個(gè)對(duì)話框讓用戶進(jìn)行一些選擇和輸入,當(dāng)用戶在該對(duì)話框上的操作結(jié)束并關(guān)閉對(duì)話框后再返回到主頁(yè)面進(jìn)行其他操作。這其實(shí)就是一個(gè)很典型的模態(tài)對(duì)話框的應(yīng)用。在WPF的Window中我們可以創(chuàng)建一個(gè)Window并調(diào)用它的ShowDialog()方法來(lái)滿足上面的需求。可是這樣的方法在WPF頁(yè)面上卻行不通。原因是:用ShowDialog()方法彈出的對(duì)話框跟瀏覽器是相互獨(dú)立的。由于彈出的對(duì)話框跟瀏覽器分別在兩個(gè)不同的窗口中,所以并不能達(dá)到模態(tài)對(duì)話框的需求。
下面給大家介紹一種用Popup來(lái)模擬模態(tài)對(duì)話框的方法。彈出的對(duì)話框是覆蓋在WPF頁(yè)面的上面。用戶只有在關(guān)閉了對(duì)話框之后才能返回原來(lái)的頁(yè)面。
比如現(xiàn)在有下面一個(gè)簡(jiǎn)單的WPF頁(yè)面。
該頁(yè)面的xaml文件也很簡(jiǎn)單:
現(xiàn)在要實(shí)現(xiàn)這樣的功能:點(diǎn)擊按鈕彈出一個(gè)模態(tài)對(duì)話框讓用戶輸入一個(gè)字符串,然后在頁(yè)面的文本框里面顯示剛才用戶輸入的字符串。
下面是具體的截圖:
為了實(shí)現(xiàn)上面的功能,首先在xaml文件里面加上一個(gè)Popup:
在Popup里面的布局跟普通的WPF的Window和Page用的是一樣的方法。你就把Popup當(dāng)成一個(gè)容器就行了。然后給BtnShowDlog加上一個(gè)Click事件。完整的xaml代碼是下面這樣的:
最后,就是在cs文件里面添加代碼:
1. 添加一個(gè)顯示和關(guān)閉對(duì)話框的方法
代碼非常簡(jiǎn)單,就是顯示對(duì)話框的時(shí)候使原來(lái)的頁(yè)面不可用;關(guān)閉對(duì)話框的時(shí)候使原來(lái)的網(wǎng)頁(yè)恢復(fù)為可用狀態(tài)。
2. 為主頁(yè)面上的“Show Modal Dialog”按鈕添加Click事件
調(diào)用ShowModalDialog方法來(lái)顯示對(duì)話框
3. 為對(duì)話框的Cancel按鈕和Close按鈕添加Click事件
調(diào)用ShowModalDialog方法使對(duì)話框不可見(jiàn)。
4. 為對(duì)話框的OK按鈕添加Click事件
首先使對(duì)話框不可見(jiàn),然后修改根據(jù)用戶在對(duì)話框上的輸入來(lái)修改主頁(yè)面上的Label的文本內(nèi)容。
通過(guò)上面的方法,就可以讓對(duì)話框跟主頁(yè)面顯示在同一個(gè)瀏覽器里,并且使用戶在關(guān)閉對(duì)話框之前不能做任何操作。也就是說(shuō),實(shí)現(xiàn)了一個(gè)模態(tài)對(duì)話框的所有機(jī)制。
PS:剛開(kāi)始接觸WPF,通過(guò)搜索和學(xué)習(xí),覺(jué)得這是用WPF實(shí)現(xiàn)模態(tài)對(duì)話框的一個(gè)好方法。也許還有更好的方法,我知道了之后會(huì)共享給大家。同時(shí)如果你知道更好的方法,希望你能告訴我。
本文為張軍原創(chuàng)文章,轉(zhuǎn)載無(wú)需和我聯(lián)系,但請(qǐng)注明來(lái)自張軍的軍軍小站,個(gè)人博客http://www.eyofj.com
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
