【原譯】一個可定製的WPF任務對話方塊

來源:互聯網
上載者:User

今天實在看WPF揭秘的時候看到TaskDialog這個控制項的。然後就去找了一下開源的代碼。在codeproject上發現了這個,非常給力。。另外codeproject改版後很漂亮哦。

介紹:
這是用WPF實現Vista上TaskDialog效果的代碼。

Messagbox訊息框
通過調用重寫的靜態Show方法。TaskDialog就會表現的像一個Messagebox。他有四個文本類型的屬性:Header(頭部), Content(內容), Detail(更多), 和 Footer(底部),其實Detail是一個摺疊的地區, 而Header和Footer還有一個icon屬性(HeaderIcon和FooterIcon),除此之外,Header還有Background(背景)和Foreground(前景)屬性

 

// TaskDialog.Show方法簽名publicstaticTaskDialogResult Show(    stringtitle,    stringheader,    stringcontent,    stringdetail,    stringfooter,    TaskDialogButton button,    TaskDialogResult defaultResult,    TaskDialogIcon headerIcon,    TaskDialogIcon footerIcon,    Brush headerBackground,    Brush headerForeground) // TaskDialog.Show 方法的一個例子TaskDialog.Show("Task Dialog 測試",     "訊息框的標題文字",     "訊息框的內容部分. "+     " 可以自適應內容.",     "訊息框的細節部分 "+     "可以自適應內容",     "訊息框的底部.",     TaskDialogButton.Ok,     TaskDialogResult.None,     TaskDialogIcon.Information,     TaskDialogIcon.Shield,     Brushes.White,     Brushes.Navy);

 

定製TaskDialog
使用靜態Show方法。Header, Content, Detail, 和Footer 就限制了只能傳遞字串作為值了。
為了定義這個對話方塊,你先建立TaskDialog類的一個對象,然後分別設定一下各個屬性,最後調用Show方法就可以了

 

// TaskDialog 執行個體化例子TaskDialog dialog=newTaskDialog();dialog.Title="TaskDialog example";dialog.HeaderIcon=TaskDialogIcon.Warning;dialog.SystemSound=TaskDialogSound.Exclamation;// header 屬性設定dialog.Header="This is the Header.";dialog.HeaderBackground=Brushes.DarkGray;dialog.HeaderForeground=Brushes.White;// Content, Detail 和 Footer屬性設定dialog.Content="This is the content";dialog.Detail="This is the detail";dialog.Footer="this is the Footer";dialog.Show();

 

 

TaskDialog控制項派生自HeaderedContentControl類,因為從HeaderedContentControl類可以獲得Header和Content屬性,TaskDialog僅僅是添加了Detail和Footer屬性,這些屬性是Object類型,並且有他們自己的template(模板)屬性HeaderTemplate, ContentTemplate, DetailTemplate, 和 FooterTemplate),TaskDialog類對於常值內容有著預設的資料範本,當然你也可以用那四個模板來替換,這樣你就可以以你喜歡的任何方式來格式化文本了。下面這個圖展示了通過斜體和底線來格式化文本。


圖2

//為上面這個圖的content屬性的 DataTemplate 模板<DataTemplatex:Key="_customContentDataTemplate">   <TextBlock Text="{Binding Content,        RelativeSource={RelativeSource FindAncestor,                        AncestorType={x:Type Controls:TaskDialog}}}"        FontStyle="Italic"        TextDecorations="Underline"        TextWrapping="Wrap"/></DataTemplate>

 

 

因為Header,Content,Detail和Footer是object類型,因此不再受到只能是文本的限制了,你可以防止你喜歡的任何類型到TaskDialog,下面這個例子中的TaskDialog是不是很像UAC的提示呢。這裡Content屬性是一個UserControl類型,放置了一個圖片和一些文本還有兩個CommandButtons(都是普通的按鈕。。不過添加了一些定製的樣式,再加了Header屬性)


圖三

一個類比vista的檔案拷貝視窗的TaskDialog。。


圖四

額外的一些有意思的屬性

下面是TaskDialog暴露的屬性列表(按字母表排序)
Button1Text: string類型,當TaskDialogButton屬性被設定為Custom的時候,用來設定按鈕的文字
Button2Text: 同上
Button3Text: 同上
DefaultResult: TaskDialogResult類型. 設定預設的按鈕
IsButton1Enabled: bool類型. 擷取或設定按鈕的Enabled狀態
IsButton2Enabled: 同上
IsButton3Enabled: 同上
IsCloseButtonEnabled: bool類型. 擷取或設定視窗關閉按鈕的Enabled狀態 (預設為false)
IsExpanded: bool類型,擷取或是設定Detail部分的可見度。
IsModal: bool類型,擷取或是設定對話方塊是不是模態的
ShowInTaskBar: bool類型,擷取或是設定對話方塊是不是顯示在工作列中
SystemSound: TaskDialogSound類型. 設定當對話方塊顯示的時候播放的聲音
TaskDialogButton: TaskDialogButton類型. 顯示在對話方塊上的按鈕可以是None, Ok, OkCancel, YesNo, YesNoCancel, or Custom (查看上面提到的按鈕設定)
Title: string類型,對話方塊的標題
ToggleButtonTexts: TaskDialogToggleButtonTexts提供了兩個屬性來設定toggle按鈕的這個屬性,當toggle 按鈕摺疊或是展開的時候 (預設是’Show Details’ 和’Hide Details’).
TopMost: 設定對話方塊是否置頂

Demo

下載TaskDialog例子,查看Window1.xaml中按鈕的單擊事件,來看TaskDialog是如何被建立的。。

著作權:本文,包括原始碼和檔案,在CPOL下授權。

原文地址:A-Customizable-WPF-TaskDialog

著作權聲明:本文由http://leaver.me 翻譯,歡迎轉載分享。請尊重作者勞動,轉載時保留該聲明和作者部落格連結,謝謝!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.