DSkin入門教程和注意事項新人必看-2018-3-30_第1頁
DSkin入門教程和注意事項新人必看-2018-3-30_第2頁
DSkin入門教程和注意事項新人必看-2018-3-30_第3頁
DSkin入門教程和注意事項新人必看-2018-3-30_第4頁
DSkin入門教程和注意事項新人必看-2018-3-30_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

DSkin入門教程和注意事項通過授權(quán)客戶端更新和下載dll,包含了以下4個文件DSkin.dll是主要的控件庫DSkin.Design.dll是開發(fā)和設(shè)計的支持庫,如果沒有引用,里面大部分控件將不能在設(shè)計器里正常使用,而且會報未授權(quán),發(fā)布的時候不需要該dll。DSkin.xml是VS的智能提示文件,對DSkin.dll里面的方法屬性等提供提示說明更新文檔.txt是DSkin的更新日志,可以查看DSkin更新的功能和控件以及修復(fù)的BUG為.net版本,根據(jù)項目需求下載相應(yīng)的版本,.net版本盡可能一致,這樣不容易出問題。2.0版本的是包含Linq的,使用的時候可以加上usingSystem.Linq;使用的時候需要引用DSkin.dll和DSkin.Design.dll,另外DSkin.xml需要和DSkin.dll放在同一個目錄,一般是Debug目錄。把DSkin里面的控件添加工具箱,可以新建個名稱為DSkin的選項卡,直接把DSkin.dll拖到工具箱里面就可以了。窗體的使用:添加窗體,繼承DSkinForm注意:DSkinFormLayered模式下支持DSkin的大部分控件,以及其他一部分帶有Paint事件的控件,對于不支持的控件需要使用ControlHost控件來承載,把那些控件放在ControlHost里面。ControlHost不能相互嵌套,只能一層。因為ControlHost是一個獨立的窗體,添加之后會在控件最頂層,盡可能的少用或者不用ControlHost,如果你不需要透明效果和動畫效果,你可以直接把窗體的IsLayeredWindowForm改成False,關(guān)閉Layered模式,這樣窗體就可以支持其他普通控件了,可以不需要ControlHostLayered模式是指DSkinForm的IsLayeredWindowForm為trueLayered模式的優(yōu)勢:更高的呈現(xiàn)效率,更好的渲染效果,不會閃爍,支持窗體的任意透明,支持窗體動畫。QQ、迅雷、酷狗等等都是采用這種方式呈現(xiàn)的 缺點:不能很好的支持普通控件做異形窗體,在Layered模式下,把背景色設(shè)置成透明色,然后設(shè)置透明的PNG圖片為背景就可以了如果要將窗體當成子窗體添加到其他窗體或者控件里面需要將該子窗體的IsLayeredWindowForm改成False,否則會報創(chuàng)建句柄錯誤。DSkin里的DSkinDataGridView、DSkinSplitPanel、DSkinChatRichTextBox、DCSkinComboBox不支持Layered模式常用控件的主要事項:DSkinButton、DuiButton:適應(yīng)圖片大小,這個時候控件尺寸由NormalImage的圖片尺寸決定,是否為純色,默認會繪制一層樣式層??梢栽O(shè)置按鈕風(fēng)格DSkinListBox、DuiListBox:添加完項目之后要調(diào)用LayoutContent();方法,現(xiàn)在一般可以不需要手動調(diào)用了項目布局的位置偏移,可以通過設(shè)置項目的Margin屬性來控制啟用多行多列的時候,項目布局由ItemSize屬性決定,如果是浮動布局可以不需要設(shè)置ItemSize//設(shè)置模板,模板是繼承DSkin.Controls.DSkinGirdListCellTemplatedSkinGridList1.Columns[2].CellTemplate=typeof(Component2);object[]data=newobject[10000];Imagebt=Properties.Resources.bt;for(inti=0;i<data.Length;i++){data[i]=new{狀態(tài)="23狀態(tài)",圖片=bt,姓名="24dfs"+i,ID=i};}dSkinGridList1.DataSource=data;//綁定數(shù)據(jù)源,數(shù)據(jù)源可以是DataTable,DataSet,List等等,沒有設(shè)置模板的列需要設(shè)置DataPropertyName屬性來關(guān)聯(lián)綁定的字段名更新數(shù)據(jù)源的時候,如果數(shù)據(jù)源對象沒有變,直接調(diào)用DataBind()就可以更新數(shù)據(jù)顯示了手動添加數(shù)據(jù)需要usingDSkin.Controls;for(inti=0;i<500;i++){dSkinGridList1.Rows.AddRow(i,"asda"+i,"hgsf","kjt");}自定義分頁數(shù)據(jù) privatevoiddSkinGridList1_PageIndexChanged(objectsender,EventArgse){//CustomPage自定義分頁為true,RowCount可以自定義,設(shè)置總數(shù)據(jù)量。在PageIndexChanged事件可以通過添加Row或者重新綁定數(shù)據(jù)源來加載對應(yīng)頁面的數(shù)據(jù)//1、添加Row數(shù)據(jù)dSkinGridList1.Rows.Clear();for(inti=0;i<100;i++){dSkinGridList1.Rows.AddRow(dSkinGridList1.PageIndex,"測試數(shù)據(jù)",231,i);}//2、綁定對應(yīng)頁面的數(shù)據(jù)Imagebt=Properties.Resources.bt;List<object>data=newList<object>();for(inti=0;i<100;i++){data.Add(new{狀態(tài)=dSkinGridList1.PageIndex,圖片=bt,姓名="24dfs"+i,ID=i});}dSkinGridList1.DataSource=data;}DSkinTabBar需要設(shè)置TabControl屬性來關(guān)聯(lián)窗體上的DSkinTabControl才能使用,DSkinTabItem為虛擬控件,可以繼承來設(shè)計效果關(guān)聯(lián)的TabControl,可以設(shè)置ItemSize為1,1來隱藏頭部DSkinHtmlLabel、DSkinHtmlToolTip這兩個控件可以支持簡單的Html和CSS,添加的圖片可以支持http://和file:///的url,也自定義image的關(guān)鍵詞通過ImageLoad事件來處理加載的圖片Imageimage=Image.FromFile("Images//1_100.gif");privatevoidduiHtmlLabel1_ImageLoad(objectsender,DSkin.Html.Core.Entities.HtmlImageLoadEventArgse){e.Callback(image);e.Handled=true;}//查詢元素vara=dSkinHtmlLabel1.HtmlContainer.Root.Query(c=>c.TagName=="img").ElementAt(0);a.MouseUp+=(s,E)=>//綁定事件{Console.WriteLine("MouseUp"+E.Location);};DuiBrowser、DSkinBrowser使用瀏覽器控件需要在群里下載Wke.dll,plugins目錄的NPSWF32.dll是Flash插件,如果不使用Flash可以刪除duiBrowser1.InvokeJS("alert('aaa')");//調(diào)用JS觸發(fā)AlertBox事件//JS調(diào)用C#,建議把委托定義成全局的,防止被回收jsNativeFunctionjs=newjsNativeFunction(a=>{MessageBox.Show(newJsValue(a,0).ToString());//獲取JS調(diào)用C#的參數(shù),后面的數(shù)字是參數(shù)索引returnJsValue.JsString(a,"測試");//JS調(diào)用C#方法之后的返回值});duiBrowser1.JsBindFun("msgBox",js,1);//綁定C#的方法,msgBox是方法名,數(shù)字為綁定到JS里的方法參數(shù)數(shù)量網(wǎng)頁里只要用JS調(diào)用msgBox('aa123測試');//這樣就可以回調(diào)調(diào)用C#的方法了新版的是采用Ewe內(nèi)核的,群里下載Ewe的dll,比之前的wke更加完善一些。使用方式差不多。不過提供更加便捷的JS調(diào)用C#的方法先設(shè)置調(diào)用方法的對象定義js要調(diào)用的C#的方法,DSkin.DirectUI.JSFunction特性加到要調(diào)用的方法上;參數(shù)和返回值要對應(yīng);最后網(wǎng)頁中的JS直接調(diào)用Test('哈哈123test',1000)就可以回調(diào)給對應(yīng)的C#方法了C#調(diào)用JS,JS調(diào)用C#,獲取返回值,彈出窗體顯示結(jié)果JS的Alert彈窗那些需要通過AlertBox這些事件來捕獲,自己定義彈窗。否則沒有彈窗顯示讀取程序內(nèi)嵌網(wǎng)頁,和WebUI實現(xiàn)方式一樣,看下面的采用Html開發(fā)桌面程序就是添加程序集,網(wǎng)頁設(shè)置為內(nèi)嵌資源,設(shè)置URL注意:XP系統(tǒng)上無法使用flash插件瀏覽器控件不建議加到用戶控件里。如果要加,請寫代碼添加,判斷DesignMode。設(shè)計模式下不要創(chuàng)建瀏覽器控件。否則會報無法加載dll的問題DSkinChart定義X軸顯示的文字定義圖表樣式綁定數(shù)據(jù)源,數(shù)據(jù)源可以是集合、數(shù)組、DataTable、DataSetList<double>data=newList<double>();//一條數(shù)據(jù)Randomr=newRandom();for(inti=0;i<7;i++){data.Add(r.Next());}dSkinChart1.DataSource=data;//多條數(shù)據(jù),可以用二維數(shù)組或者DataTable、DataSetArrayList[]ChartData=newArrayList[2];ChartData[0]=newArrayList();Randomr=newRandom();for(inti=0;i<7;i++){ChartData[0].Add(r.Next());}ChartData[1]=newArrayList();for(inti=0;i<7;i++){ChartData[1].Add(r.Next());}dSkinChart1.DataSource=ChartData;DSKinGroupBox注意:添加的控件設(shè)置屬性可能會無效,需要手動將生成的代碼調(diào)整順序。這個BUG暫時無法解決將DSKinGroupBox的代碼移到其他控件下面,然后再隨便改一下設(shè)計器的控件,讓設(shè)計器重新整理生成的代碼這樣添加到DSKinGroupBox的控件設(shè)置的屬性就有效果了。虛擬控件的使用:可以通過實體控件的智能任務(wù)卡添加,或者DUIControls屬性里添加虛擬控件支持單個組件復(fù)制和粘貼,選中需要復(fù)制的虛擬控件,Ctrl+C,然后點擊選中目標控件,Ctrl+V就可以把虛擬控件復(fù)制到目標控件了。需要注意暫時還不能同時復(fù)制控件內(nèi)部的虛擬控件,復(fù)制過去的虛擬控件位置不變,另外需要支持虛擬控件設(shè)計模式的控件才可以作為目標控件粘貼。否則粘貼之后虛擬控件的Parent屬性為Null,需要手動設(shè)置Parent屬性,才可以轉(zhuǎn)移到目標控件。如果通過設(shè)計器虛擬控件集合添加的虛擬控件沒有添加到界面上,你可以在屬性欄里的組件下拉框里找,如果有的話,設(shè)置該虛擬控件的Parent屬性到你需要添加到的控件里,如果不能設(shè)置,你重新打開設(shè)計器就可以了DSkinBaseControl上的虛擬控件才可以在設(shè)計器上拖拽虛擬控件支持多選,用Ctrl鍵多選,可以用來同時設(shè)置多個控件的屬性可以通過這幾個屬性來控制虛擬控件在設(shè)計模式下的行為虛擬控件支持文檔設(shè)計模式,右鍵添加組件,把繼承類改成DuiBaseControl或者其他虛擬控件就可以了。這樣虛擬控件就像用戶控件一樣,可以直接設(shè)計,可以往里面添加虛擬控件和組件。做列表項目什么的都很方便。虛擬控件集合支持Linq查詢和Lambda表達式查詢Query擴展方法需要添加usingDSkin.DirectUI;//查詢dSkinBaseControl1里面的所有DuiLabel并執(zhí)行動畫dSkinBaseControl1.InnerDuiControl.Query<DuiLabel>(l=>true).DoEffect(0,100,500,"Left",(p)=>{});使用DoEffect來做簡單的動畫DoEffect是封裝了定時器的方法回調(diào),usingDSkin.DirectUI;添加這個命名空間之后會有多個DoEffect方法重載//自定義特效Opacity=0;Rectanglerect=Screen.PrimaryScreen.WorkingArea;inttop=(rect.Height-Height)/2;this.Location=newPoint(rect.Width-Width,top);intcenterLeft=(rect.Width-Width)/2;this.DoEffect(()=>{if(Left>centerLeft+4){Opacity=1-1.0*(Left-centerLeft)/(rect.Width-Width-centerLeft);Left-=((Left-centerLeft)/5);returntrue;//繼續(xù)動畫執(zhí)行}Opacity=1;returnfalse;//停止動畫執(zhí)行});虛擬控件的SendTask方法的使用在使用自定義模板的時候經(jīng)常會遇到需要處理模板的虛擬控件的事件,如果采用外部遍歷虛擬控件來綁定事件,會感覺很麻煩,所以加增加了這個SendTask方法。使用的時候很簡單,只要需要在模板里綁定對應(yīng)的處理事件,里面調(diào)用SendTask方法,把任務(wù)發(fā)送出去,然后通過對應(yīng)的承載的實體控件或者父級虛擬控件的AcceptTask的事件來處理就行了。比如:這個是一個DSkinGridList的Cell模板,我需要的就是DuiCheckBox被選中的時候,彈出一個消息框,然后我就在這個模板里綁定這個虛擬控件的CheckedChanged事件通過這個事件來發(fā)送任務(wù)。然后,我們需要接收這個任務(wù),可以在窗體的Load事件里綁定承載這個Cell模板的實體控件的AcceptTask事件,通過這個事件來接受剛才定義在Cell模板里的任務(wù),接收到了之后,執(zhí)行該任務(wù)。采用Html開發(fā)桌面程序HYPERLINK《新版WebUI開發(fā)模式點這里》用DSkin的Html開發(fā)桌面的優(yōu)勢:支持DPI縮放,不會出現(xiàn)界面模糊和界面過小的問題有海量的界面模板資源,可以支持JQuery,Bootstrap等等插件只要一點點Html基礎(chǔ)的就行了,開發(fā)界面很簡單,易上手支持JS和C#相互調(diào)用附加的dll小,才3M,比起用Cef那個小太多了缺點:不能完全兼容Html5和CSS3,畢竟dll體積那么小,不能包含所有瀏覽器的功能,顯示速度比不上瀏覽器。內(nèi)存占用,比普通的桌面程序稍微耗內(nèi)存。開發(fā)準備:項目右鍵添加窗體,改繼承,改成DSkin.Forms.WebUIForm項目右鍵,添加放Html文件的目錄,比如View群里下載WebUI的模板文件,放到這個View目錄里,右鍵修改這個模板文件的屬性生成操作,改成嵌入的資源,所有相關(guān)的Html,圖片還是CSS,JS文件都要改這個屬性打開那個index.html,在ui-content這個DIV里面加入你要的內(nèi)容,然后保存在之前添加的窗體的構(gòu)造函數(shù)里設(shè)置資源的鏈接,file:///要3個斜杠最后,設(shè)置剛才的窗體為主窗體,然后添加資源,生成就可以運行了注意事項:網(wǎng)頁里的資源鏈接都要用相對路徑,當然也可以是http開頭的網(wǎng)絡(luò)資源,比如DPI的支持,需要項目設(shè)置配置把這里的配置取消注釋,默認是注釋掉的如果沒有這個文件,打開項目屬性點擊啟用,取消啟用,然后就會在Properties生成那個文件關(guān)于窗體尺寸大小,假如你希望正常的情況下窗體打開時候尺寸為100*100,但是100*100在高DPI屏幕下,設(shè)置屏幕縮放了的情況下,會顯的很小。所以你需要根據(jù)DPI縮放調(diào)整窗體尺寸,你希望的尺寸乘以ZoomFactor窗體的縮放比例屬性,假如屏幕縮放是125%的,然后就變成125*125了,這樣就不會顯的小了。JS和C#調(diào)用,看上面的DSkinBrowser說明,這里可以不需要設(shè)置GlobalObject。默認集成了這幾個事件,可以在網(wǎng)頁中自動觸發(fā)的默認集成的Js可以直接調(diào)用的方法Console_WriteLine("輸出");//調(diào)試的時候,這個方法可以控制臺輸出ResizeWindow("righttop");//調(diào)整窗體大小MoveWindow();//移動窗體Command_Min();//最小化窗體Command_MaxOrNor();//最大化或者還原窗體Command_Close();//關(guān)閉窗體GetWindowState();//獲取窗體最大化,最小化狀態(tài)如果需要其他事件和方法,需要自己封裝。調(diào)試JS可以通過ConsoleMessage事件來獲取錯誤消息窗體上面不要放控件,里面的內(nèi)容全部用Html來定義對于使用框架頁面frame標簽的可以設(shè)置命名空間映射Html和C#代碼,一個頁面對應(yīng)一個C#類。頁面邏輯就可以寫在對應(yīng)的C#類里這個要注釋掉不能有多個相同名稱的框架頁面文件,比如不同目錄里都有index.html而且都用框架來加載封裝好了一個異步獲取數(shù)據(jù)的方法,簡化JS里異步獲取數(shù)據(jù)的操作新的異步調(diào)用方法:C#方法定義和之前同步方法一樣只要Js調(diào)用這個方法的時候,最后一個參數(shù)用有一個參數(shù)的回調(diào)函數(shù)就可以了。執(zhí)行這個C#方法之后,這個方法的返回值會通過這個回調(diào)函數(shù)設(shè)置。異步調(diào)用這里的回調(diào)參數(shù)a就是上面C#方法的返回值同步調(diào)用注意:異步調(diào)用C#方法,如果C#方法里有操作UI的,需要委托到主線程新版WebUI開發(fā)模式新版開發(fā)模式采用MiniBlink內(nèi)核,這個內(nèi)核更新,功能更完善,而且提供開發(fā)者功能,內(nèi)核還在更新中,而且是開源項目:/weolar/miniblink49如果是內(nèi)核方面的問題可以到/提問mb.dll群里下載開始開發(fā)新建X86的Winform項目,窗體繼承改成DSkin.Forms.MiniBlinkForm窗體尺寸設(shè)置和舊版的一樣,期望大小乘以ZoomFactor,是為了適應(yīng)DPI縮放;這段DPI代碼取消注釋,如果沒有app.manifest,可以在項目屬性里,點擊啟用,再取消啟用就有這個文件了程序集里的資源Url寫法是res://開頭的不是之前的file:///res://WebUIDemo/Views/index.htmlres://程序集名/若干文件夾/文件名區(qū)分大小寫文件屬性要改成嵌入的資源Html頁面和C#類綁定,C#類代碼就寫在之前設(shè)置的頁面和類的名稱要一樣,Html在哪個文件夾無所謂,區(qū)分大小寫,支持主頁面和框架頁面的綁定。舊版的不支持主頁面綁定類繼承DSkin.Forms.MiniBlinkPageC#屬性和頁面雙向綁定,依賴Vue,支持簡單屬性的雙向綁定,和集合的單向綁定,復(fù)雜屬性請用Json字符串JS中也可以用Get(“屬性名”);Set(“屬性名”,值)訪問和設(shè)置屬性值,可以不需要Vue屬性寫法:stringtext="文字";publ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論