日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF系列一

發(fā)布時間:2025/5/22 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF系列一 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學(xué)了一段時間的WPF,雖然沒有在項目中運(yùn)用,就抽時間在博客里記錄下來.寫博客的目的是增加自己的理解,以前幫助剛學(xué)的朋友們,了解一下WPF.

WPF(Windows Presentation Foundation),先了解一下WPF的核心框架.

document service 提供了基于的打印和報表服務(wù),通過這些組件實現(xiàn)自定義的打印和顯示效果.

user interface service? controls(控件庫)關(guān)于布局以及數(shù)據(jù)綁定

core Presentation? 包含了2d圖形,3d圖形,文本,視頻,音頻,和顯示效果,同時還包括了強(qiáng)大的動畫效果.

base service 提供了xaml的支持,輸入和事件的支持,屬性系統(tǒng)等.

WPF核心體系結(jié)構(gòu)和作用

Sharp(圖形元素基類) Control(控件模板) Panel(布局基類)? 繼承自? frameworkElement(框架的屬性集,事件集,以及方法集) 繼承自 UIElement(數(shù)據(jù)模板的元素) 繼承自 visual(生成可視化對象樹) 繼承自 DependencyObject(屬性系統(tǒng)) 繼承自 DispatcherObject(線程分配系統(tǒng))

WPF中的基本對象 Application\Window\Navigation\Dispacher

Application 和winfrom中的對象類似

window 對象相當(dāng)于Page對象

Navigation用于頁面間的導(dǎo)航控制.

Dispacher對象提供管理線程工作項隊列的服務(wù).

關(guān)于Application和window對象的簡單代碼就不寫了,今天就寫兩個小例子,一個關(guān)于導(dǎo)航和,一個關(guān)于線程的

Navigation是一個導(dǎo)航對象,也就是能像web頁面那樣支持導(dǎo)航,前進(jìn)后退等功能,

新添加兩個Page頁,來演示一下導(dǎo)航的簡單用法.

第一個頁當(dāng)導(dǎo)航頁使用,第二個頁面沒什么大的用處,在第一個頁的構(gòu)造函數(shù)里面加上?this.KeepAlive = true;這行代碼,意思是在導(dǎo)航歷史中記錄.

添加3個Button,我目前寫代碼,用到的幾個導(dǎo)航的方式,

第一種導(dǎo)航的例子

Page2 page = new Page2(); ???//new 一個page2的對象 想的于winfrom的跳轉(zhuǎn)頁面.????????

NavigationService ns = NavigationService.GetNavigationService(this); ? //獲得導(dǎo)航器NavigationService??????????

ns.Navigate(page); //異步導(dǎo)航到某個對象? 也就是new 出來的對象page2

第二種導(dǎo)航的例子

NavigationService ns = NavigationService.GetNavigationService(this); ???????????

ns.Source = new Uri("Page2.xaml", UriKind.Relative); //直接使用Uri地址導(dǎo)航,UriKind.Relative使用一個相對的Uri路徑

第三種導(dǎo)航的例子

NavigationService ns = NavigationService.GetNavigationService(this); ???????????

ns.Content = new Page2(); //直接使用導(dǎo)航對象的Content 直接指向page2頁

返回的方法

if (this.NavigationService.CanGoBack) ???????????????

this.NavigationService.GoBack(); //如果有一個返回的條目,就返回

前進(jìn)的方法

if (this.NavigationService.CanGoForward) ???????????????

this.NavigationService.GoForward(); //如果有下個條目,就導(dǎo)航

刷新也不一樣了 this.NavigationService.Refresh(); 需要用NavigationService對象的Refresh方法來刷新.

下面講一下Dispacher對象,后續(xù)會講,xaml,資源以及樣式,綁定,路由,等一些基礎(chǔ)的東西,這些基礎(chǔ)的內(nèi)容會在一周內(nèi)更新完成.

拖一個Label 一個 ProgressBar 一個 Button ,好了,這次就需要一個頁面就搞定了,做什么 相信大家以及明白了.

然后 我們只需要在Button的Click事件里面把代碼完成了,就行了.

定義一個委托 private delegate void RefUIL(string var);

在Button的Click事件里面加上這個些代碼

for (int i = 0; i <= 100; i++) ???????????

?{

  ???? //WPF中的線程又被封裝了? 用?Dispatcher來管理,上面已經(jīng)說了,??????????????

    this.Dispatcher.BeginInvoke(new RefUIL(RefUI), DispatcherPriority.Normal, new string[] { i.ToString() }); ???????????????                 ???????????System.Threading.Thread.Sleep(100); ???????????????

    this.DoEvents(); ??// 這是自己實現(xiàn)的一個擴(kuò)展方法 代碼下面會解釋?????????

}????

?RefUI方法在這里

//相信這樣的代碼在winfrom里面寫很多,就是跨線程賦值..

private void RefUI(string var) ???????

?{ ??????????? this.label1.Content = var; ??????????? this.progressBar1.Value = int.Parse(var); ??????? }

下面是一個擴(kuò)展類 就是擴(kuò)展window 這個對象

?public static class Ext ???

{ ???????

  //一個擴(kuò)展方法 對Window對象進(jìn)行擴(kuò)展

  public static void DoEvents(this Window win) ???????

  { ???????????

    //表示Dispatcher中的執(zhí)行循環(huán) ???????????

    DispatcherFrame frmae = new DispatcherFrame(); ???????????

    ?//當(dāng)前的線程異步執(zhí)行 ???????????? 并進(jìn)行回調(diào)? 如果沒有回調(diào) 只能執(zhí)行一次

    Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(Exit), frmae); ???????????

    //進(jìn)入執(zhí)行循環(huán) ???????????

    Dispatcher.PushFrame(frmae); ???????

  ?}???

  ?/// 讓線程繼續(xù)執(zhí)行??????????

    public static object Exit(object obj) ???????

    ?{ ???????????

        ((DispatcherFrame)obj).Continue = false; ??????? //一個比較有意思的值,???? false為繼續(xù),true為停止

         return null; ???????

    } ???

} //對于這段代碼的理解就是,讓DispatcherFrame 在Dispatcher執(zhí)行循環(huán),然后異步回調(diào)一個函數(shù),并每次繼續(xù)執(zhí)行

WPF系列一,大概分為5篇博客,會把一些基礎(chǔ)的東西講完.然后在考慮將2D,3D,因為我學(xué)的時候主要應(yīng)用是3D效果,到時候給大家推薦兩個挺好的工具,后話(如果大家找不到免費(fèi)版本,我也可以免費(fèi)傳給大家).

轉(zhuǎn)載于:https://www.cnblogs.com/chenmengmeng/archive/2012/01/06/2314484.html

總結(jié)

以上是生活随笔為你收集整理的WPF系列一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。