一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

WPF基礎(chǔ)之資源

 ontheroad96j47 2021-11-08

WPF資源

      WPF資源系統(tǒng)是一種保管一系列對(duì)象(如常用的畫刷、樣式或模版)的簡單辦法,從而使您更容易地復(fù)用這些對(duì)象。

WPF允許在代碼中以及在標(biāo)記中的各個(gè)位置定義資源(和特定的控件、窗口一起定義,或在整個(gè)應(yīng)用程序中定義)。資源具有如下優(yōu)點(diǎn)。

  • 高效。定義好資源可以在多個(gè)地方復(fù)用。

  • 可維護(hù)性。易于修改。

  • 適應(yīng)性??梢詣?dòng)態(tài)修改。

 資源集合

每個(gè)元素都有Resources屬性,該屬性存儲(chǔ)了一個(gè)資源字典集合(它是ResourceDictionary類的實(shí)例)。資源集合可包含任意類型的對(duì)象,并根據(jù)字符串編寫索引。

<Window.Resources> <ImageBrush x:Key="TitleBrush" TileMode="Tile" ViewboxUnits="Absolute" Viewport="0 0 32 32"ImageSource="" Opacity="0.3"></ImageBrush></Window.Resources><StackPanel> <Button Background="{StaticResource TitleBrush}">Requery</Button></StackPanel>

 資源的層次

每個(gè)元素都有自己的資源集合,為了找到期望的資源,WPF在元素樹中進(jìn)行遞歸搜索。

只要不在同一集合中多次使用相同的資源名,就可以重用資源名稱。

<Window.Resources> <ImageBrush x:Key="TitleBrush" TileMode="Tile" ViewboxUnits="Absolute" Viewport="0 0 32 32" ImageSource="happyface.jpg" Opacity="0.3"></ImageBrush> </Window.Resources> <StackPanel> <Button Background="{StaticResource TitleBrush}">Requery</Button> <Button Background="{DynamicResource TitleBrush}"> <Button.Resources> <ImageBrush x:Key="TitleBrush" TileMode="Tile" ViewboxUnits="Absolute" Viewport="0 0 32 32" ImageSource="abc.jpg" Opacity="0.3"></ImageBrush> </Button.Resources> <Button.Content>Another Titled Button</Button.Content> </Button> </StackPanel>

 靜態(tài)資源和動(dòng)態(tài)資源

上面的代碼設(shè)置后如果執(zhí)行如下代碼

ImageBrush brush=(ImageBrush)this.Resources["TitleBrush"]; brush.Viewport = new Rect(0,0,5,5);

上述代碼從Window.Resources中檢索畫刷,并改變畫刷平鋪的尺寸,縮小笑臉圖像并壓縮圖像模式使其更加緊湊。因?yàn)槭庆o態(tài)資源正常上面的按鈕是不會(huì)有變化,

但是這一變化會(huì)傳遞給上面的按鈕,更新Viewport屬性。這是因?yàn)锽rush類繼承自Freezable類。改類有一個(gè)基本變化跟蹤特性。這意味著無論何時(shí)在WPF中改變畫刷,所有使用該畫刷的控件都會(huì)自動(dòng)更新。靜態(tài)資源和動(dòng)態(tài)資源的區(qū)別在于靜態(tài)資源只從資源集合中獲取對(duì)象一次,動(dòng)態(tài)資源每次需要對(duì)象時(shí)都會(huì)重新從資源集合中查找對(duì)象。例如:

this.Resources["TitleBrush"] = new SolidColorBrush(Colors.LightBlue);

執(zhí)行如上代碼,對(duì)于靜態(tài)資源沒影響,動(dòng)態(tài)資源會(huì)發(fā)生變化。

使用動(dòng)態(tài)屬性的情況

  • 資源具有依賴于系統(tǒng)設(shè)置的屬性(如當(dāng)前Windows操作系統(tǒng)的顏色或字體)。

  • 準(zhǔn)備通過編程的方式替換對(duì)象。(例如實(shí)現(xiàn)動(dòng)態(tài)皮膚特性,后臺(tái)會(huì)講到)

 非共享資源

正常情況下資源使用的是統(tǒng)一對(duì)象實(shí)例,這種行為成為共享,如果希望每次都創(chuàng)建一個(gè)新的對(duì)象可如下設(shè)置。x:Shared="False"

<ImageBrush x:Key="TitleBrush" x:Shared="False" TileMode="Tile" ViewboxUnits="Absolute" Viewport="0 0 32 32" ImageSource="happyface.jpg" Opacity="0.3"></ImageBrush>

 通過代碼訪問資源

private void txt_TextChanged(object sender, RoutedEventArgs e) { Button cmd = (Button)sender; ImageBrush brush = (ImageBrush)cmd.FindResource("TitleBrush"); }

可使用TryFindResource()代替FindResource()。如果找不到資源會(huì)返回null,而不是拋異常。

 應(yīng)用程序資源

      窗口不是查找應(yīng)用程序資源的最后一站,如果在控件或其他容器中知道包含窗口或頁面找不到指定的資源。WPF會(huì)繼續(xù)查找為應(yīng)用程序定義的資源。在Visual Studio中,這些資源在App.xaml文件的標(biāo)記中定義的資源。 

<Application x:Class="HelloWpf.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="GridDemoWindow.xaml"> <Application.Resources> <ImageBrush x:Key="TitleBrush" TileMode="Tile" ViewboxUnits="Absolute" Viewport="0 0 32 32" ImageSource="happyface.jpg" Opacity="0.3"></ImageBrush> </Application.Resources></Application>

應(yīng)用程序資源為整個(gè)應(yīng)用程序中重用對(duì)象提供了一種極佳的方法。

 系統(tǒng)資源

     當(dāng)某個(gè)元素查找資源時(shí),應(yīng)用程序資源仍然不是最后一站。如果沒有在應(yīng)用程序資源中找到所需的資源,元素還會(huì)繼續(xù)查找系統(tǒng)資源。

系統(tǒng)資源的三個(gè)類

  • SystemColors   訪問系統(tǒng)顏色設(shè)置。

  • SystemFonts    訪問字體設(shè)置。

  • SystemParamerers  封裝了大量的設(shè)置列表,這些設(shè)置描述了各種屏幕像素的標(biāo)準(zhǔn)尺寸、鍵盤和鼠標(biāo)設(shè)置、屏幕尺寸以及各種圖形效果(如熱跟蹤、陰影以及拖動(dòng)窗口時(shí)顯示窗口內(nèi)容)是否已經(jīng)打開。

 資源字典

      如果希望多個(gè)項(xiàng)目中共享資源,可創(chuàng)建資源字典。資源字典只是xaml文檔,除了存儲(chǔ)希望使用的資源外,不做其他任何事情。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ImageBrush x:Key="TitleBrush" TileMode="Tile" ViewboxUnits="Absolute" Viewport="0 0 32 32" ImageSource="happyface.jpg" Opacity="0.3"></ImageBrush></ResourceDictionary>

使用資源字典將其整合到應(yīng)用程序資源中。


<Application x:Class="HelloWpf.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="GridDemoWindow.xaml"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="AppBrushs.xaml"></ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources></Application>

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产老女人性生活视频| 一区二区三区人妻在线| 少妇毛片一区二区三区| 国产传媒中文字幕东京热| 高清一区二区三区不卡免费| 操白丝女孩在线观看免费高清| 亚洲一区二区三区三州| 日本不卡在线视频你懂的| 日系韩系还是欧美久久| 大香蕉伊人一区二区三区| 国产老女人性生活视频| 神马午夜福利免费视频| 俄罗斯胖女人性生活视频| 日本加勒比系列在线播放| 99精品人妻少妇一区二区人人妻| 亚洲欧美日韩色图七区| 亚洲欧美黑人一区二区| 国产成人精品99在线观看| 九九热精彩视频在线播放| 日韩精品视频免费观看| 一区二区三区免费公开| 国产韩国日本精品视频| 内射精子视频欧美一区二区| 久久热这里只有精品视频| 激情亚洲一区国产精品久久| 高清在线精品一区二区| 夫妻性生活一级黄色录像| 国产欧美日韩不卡在线视频| 亚洲日本加勒比在线播放| 国内自拍偷拍福利视频| 午夜福利在线观看免费| 欧美日韩在线观看自拍| 欧美一区二区黑人在线| 在线观看中文字幕91| 欧美日韩精品综合在线| 色综合伊人天天综合网中文| 免费性欧美重口味黄色| 国产成人国产精品国产三级| 日韩一级免费中文字幕视频 | 午夜福利网午夜福利网| 欧美日韩国产精品黄片|