DevExpress Winforms使用技巧與竅門(2020年5月匯總)
下載DevExpress v20.1完整版 DevExpress v20.1漢化資源獲取
DevExpress Winforms Controls 內(nèi)置140多個(gè)UI控件和庫,完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序。想要體驗(yàn)?點(diǎn)擊下載>>
本文中包含一些示例和調(diào)整WinForms UI組件的方法,希望當(dāng)您在使用WinForms產(chǎn)品系列的功能時(shí),這些信息能幫助到您。
如何在代碼中區(qū)分深色皮膚的光線
可以根據(jù)應(yīng)用于DevExpress驅(qū)動(dòng)的WinForms應(yīng)用程序主題來調(diào)整矢量圖標(biāo)的顏色(假設(shè)您根據(jù)DevExpress準(zhǔn)則生成矢量圖標(biāo)),如果您更喜歡柵格圖標(biāo),則可能需要手動(dòng)實(shí)現(xiàn)類似的操作。在最簡單的情況下,您將需要兩個(gè)圖像集:與淺色皮膚形成鮮明對比的較暗圖像,反之亦然。 將您的圖像放在單獨(dú)的圖像集中,并在用戶更改外觀時(shí)交換它們。 要確定皮膚是深色還是淺色,請調(diào)用FrameHelper.IsDarkSkin方法。
using DevExpress.Utils.Frames; //... if (FrameHelper.IsDarkSkin(this.GetActiveLookAndFeel())) { //current skin/palette is dark } else { //current skin/palette is light }
對于矢量皮膚,此方法還考慮了激活調(diào)色板。Bezier外觀 — 對于默認(rèn)調(diào)色板,IsDarkSkin方法返回“ true”,但是如果用戶應(yīng)用了一個(gè)調(diào)色板(例如“ Aquarelle”),則該方法返回“ false”。
覆蓋表格作為停止屏幕
在v18.1中引入Overlay Forms - 初始屏幕,這些屏幕鎖定了UI線程,并且不允許用戶與基礎(chǔ)表單進(jìn)行交互。通常啟動(dòng)屏幕可幫助指示正在進(jìn)行的操作,疊加表單的不同之處在于,它們使用自定義的繪畫工具來完全重繪初始屏幕(甚至顯示充當(dāng)按鈕的圖像)。
您可以使用Overlay Forms來限制用戶對特定應(yīng)用程序屏幕的訪問,在下面的動(dòng)畫中, Navigation Frame包括四個(gè)頁面。只有具有"Premium Subscription"的用戶才能訪問最后一頁,通過結(jié)合使用自定義文字繪畫工具和兩個(gè)圖像繪畫工具,您可以允許沒有訂閱的用戶激活此標(biāo)簽 - 并立即使用包含升級優(yōu)惠的透明屏幕"obfuscate"標(biāo)簽。
您可以簡單地處理NavigationFrame.SelectedPageChanging事件,來在用戶沒有訪問權(quán)限時(shí)取消用戶導(dǎo)航。 Overlay Forms可以幫助添加獨(dú)特的風(fēng)格,并幫助您更好地與最終用戶進(jìn)行交互。
將Data Grid列綁定到嵌套屬性
如果您過去曾經(jīng)使用過WinForms Data Grid,則可能對GridColumn.FieldName很熟悉。 如果在代碼中創(chuàng)建列,那么必須將此屬性設(shè)置為數(shù)據(jù)源字段的名稱。 如果您的數(shù)據(jù)類是簡單的屬性列表,則此屬性的實(shí)現(xiàn)細(xì)節(jié)很簡單。 在實(shí)際情況下,數(shù)據(jù)源類通常包括存儲(chǔ)來自其他自定義類的對象的屬性。 在下面的代碼示例中,每個(gè)"Employee" 記錄都包含一個(gè)具有兩個(gè)嵌套屬性的"Occupation"字段:"Department"和"Position”。
public class Employee { public string FirstName { get; set; } public string LastName { get; set; } public Occupation Occupation { get; set; } } public class Occupation { public DepartmentEnum Department { get; set; } public string Position { get; set; } } public enum DepartmentEnum { RnD = 1, Support = 2, Design = 3, TW = 4, Management = 5 }
要生成標(biāo)準(zhǔn)(非主從)網(wǎng)格并顯示"Employee"實(shí)體,您需要添加四列并設(shè)置正確的FieldName屬性。對于前兩列很簡單:FieldNames是“ FirstName”和“ LastName”,但是輕松設(shè)置其他兩列可能并不容易(特別是對于DevExpress新手用戶),與您在代碼中訪問屬性相同的方式指定這些列 - 輸入父屬性名稱、點(diǎn)字符(".")和子屬性名稱。
GridColumn colFirstName = new GridColumn() { Caption = "First Name", FieldName = "FirstName", Visible = true }; GridColumn colLastName = new GridColumn() { Caption = "Last Name", FieldName = "LastName", Visible = true }; GridColumn colDepartment = new GridColumn() { Caption = "Department", FieldName = "Occupation.Department", Visible = true }; GridColumn colPosition = new GridColumn() { Caption = "Position", FieldName = "Occupation.Position", Visible = true }; gridView1.Columns.AddRange(new GridColumn[] { colFirstName, colLastName, colDepartment, colPosition });
防止表格加載閃爍
默認(rèn)的表單初始化引擎會(huì)在表單準(zhǔn)備就緒后立即顯示它,窗體已可見后,將加載子控件和外觀位圖。此操作 - Microsot和DevExpress表單共有的可能導(dǎo)致閃爍,子控件越大,加載所需的時(shí)間就越長(并且閃爍更加明顯)。 如果您在應(yīng)用程序中發(fā)現(xiàn)此問題,請覆蓋表單的ShowMode屬性:
protected override FormShowMode ShowMode { get { return FormShowMode.AfterInitialization; } }
AfterInitialization值將初始形式的不透明度設(shè)置為零,當(dāng)表單及其子項(xiàng)準(zhǔn)備就緒時(shí),將恢復(fù)不透明度并同時(shí)顯示整個(gè)表單。 請注意,此調(diào)整對子MDI表單沒有影響,因?yàn)檫@些表單不支持不透明度。
隱藏布局控件項(xiàng)
需要在代碼中顯示和隱藏布局控件項(xiàng)的開發(fā)人員經(jīng)常使用BaseLayoutItem.Visibility屬性,將此屬性從Always更改為Never,剩余的布局項(xiàng)目會(huì)自動(dòng)調(diào)整大小以占據(jù)可用空間。
如果您不希望Layout Control項(xiàng)自動(dòng)調(diào)整大小,請改用Boolean ContentVisible屬性。
DevExpress v20.1全新發(fā)布,歡迎下載最新版體驗(yàn)哦~
DevExpress技術(shù)交流群2:775869749 歡迎一起進(jìn)群討論
掃描關(guān)注DevExpress中文網(wǎng)微信公眾號,及時(shí)獲取最新動(dòng)態(tài)及最新資訊