偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Silverlight自定義控件管理二重奏

開發(fā) 后端
用Silverlight創(chuàng)建自定義控件,最原始的辦法就是把所有樣式都直接寫在generic.xaml文件里,但如果自定義控件足夠多,generic.xaml 達(dá)到了好幾千行,管理起來當(dāng)然十分麻煩,這里給大家介紹兩種較為方便的管理方法。

Silverlight里面建自定義控件(Templated Control),會(huì)在工程下生成一個(gè)Themes文件夾,并在其中包含一個(gè)generic.xaml文件。這是一個(gè)ResourceDictionary文件,所有的自定義控件的默認(rèn)樣式(Default Style)都必須放在這里。

最原始的辦法就是把所有樣式都直接寫在generic.xaml文件里,但如果自定義控件足夠多,generic.xaml 達(dá)到了好幾千行,管理起來當(dāng)然十分麻煩。后來在同事的推薦下,得到兩種方法可以將各自定義控件的樣式分開管理,總算解決了這一令人頭疼的問題。

MergeDefaultStyle方法

如果研究過Silverlight Toolkit的源代碼,會(huì)發(fā)現(xiàn)里面所有的自定義控件都有一個(gè)單獨(dú)的xaml文件來保存控件的默認(rèn)樣式,當(dāng)然這些文件是不起作用的。最初以為是先用單獨(dú)的xaml文件來寫控件樣式,然后再拷貝到generic.xaml里,也就是人工同步。

然而現(xiàn)在發(fā)現(xiàn)MergeDefaultStyle方法。MergeDefaultStyle就是通過給所有單獨(dú)的xaml文件應(yīng)用一種特殊的 Build 方法,在 Build 工程的時(shí)候,自動(dòng)把 xaml 文件的內(nèi)容整合到 generic.xaml 里去。

重點(diǎn)步驟是:

1. 拷貝里面的代碼或者直接下載MergeDefaultStyle.dll。

2. 在VS里面Unload你的工程,然后編輯工程文件,或者直接用文本編輯器打開csproj文件。

3. 在最后加上下面這段代碼:

  1. <UsingTask 
  2.   TaskName="Engineering.Build.Tasks.MergeDefaultStylesTask" 
  3.   AssemblyFile="$(EngineeringResources)\Engineering.Build.dll" /> 

注意:AssemblyFile 的值是你放MergeDefaultStyle.dll的位置,可以用相對(duì)路徑。

4. 再在后面加上這一段代碼:

  1. <!-- Add "DefaultStyle" as a Build Action in Visual Studio --> 
  2. <ItemGroup Condition="'$(BuildingInsideVisualStudio)'=='true'"> 
  3.   <AvailableItemName Include="DefaultStyle" /> 
  4. </ItemGroup> 
  5. <!--  
  6. Merge the default styles of controls 
  7. (only if any of the DefaultStyle files is  
  8. more recent than the project's generic.xaml file)
  9. before compilation  
  10. dependencies are processed.  
  11. --> 
  12. <PropertyGroup> 
  13.   <PrepareResourcesDependsOn> 
  14.     MergeDefaultStyles;  
  15.     $(PrepareResourcesDependsOn);  
  16.   </PrepareResourcesDependsOn> 
  17. </PropertyGroup> 
  18. <Target 
  19.   Name="MergeDefaultStyles" 
  20.   Inputs="@(DefaultStyle)" 
  21.   Outputs="$(MSBuildProjectDirectory)\generic.xaml"> 
  22.   <MergeDefaultStylesTask 
  23.     DefaultStyles="@(DefaultStyle)" 
  24.     ProjectDirectory="$(MSBuildProjectDirectory)" /> 
  25. </Target> 
  26. <!--  
  27. Touch DefaultStyles on Rebuild to force generation of generic.xaml.  
  28. --> 
  29. <PropertyGroup> 
  30.   <RebuildDependsOn> 
  31.     TouchDefaultStyles;  
  32.     $(RebuildDependsOn);  
  33.   </RebuildDependsOn> 
  34. </PropertyGroup> 
  35. <Target Name="TouchDefaultStyles"> 
  36.   <Touch Files="@(DefaultStyle)" ForceTouch="true" /> 
  37. </Target> 

5. 重新 Load 你的工程。

6. 選擇有默認(rèn)樣式的單獨(dú)的xaml,在屬性窗口的 Build Action 里面選擇 DefaultStyle 。

7. 編譯整個(gè)工程,再打開generic.xaml文件,你會(huì)發(fā)現(xiàn) xaml 文件里的內(nèi)容已經(jīng)拷到generic.xaml里面了。

這一方法適用于Silverlight 3及Silverlight 4 。

MergedDictionary方法

上面的方法可謂是一勞永逸了,但多少有點(diǎn)不官方。而且其實(shí)還是generic.xaml掌控全局,一旦一個(gè)xaml文件出了紕漏,會(huì)影響所有的控件跟著出錯(cuò)。這樣排查起來也麻煩的很。

于是在Silverlight 3里就出來了一個(gè)更簡(jiǎn)單更官方的方法。如前所述,generic.xaml文件包含了一個(gè)ResourceDictionary,而Silverlight 3里面的ResourceDictionary 多了一個(gè)MergedDictionaries的屬性,可以把其他ResourceDictionary通過資源路徑整合到一個(gè)ResourceDicionary里面。

其實(shí)新建一個(gè)Silverlight導(dǎo)航應(yīng)用時(shí),就可以在App.xaml 里面看到這一屬性的應(yīng)用。需要注意的是,在 App.xaml 里面是可以用相對(duì)路徑的,而在 generic.xaml 里面,不可以用相對(duì)路徑,而應(yīng)當(dāng)用 "/AssemblyName;component/path”的方法說明文件路徑。

比如你的工程的AssemblyName是Slippor.Controls,而xaml的路徑是CustomControl文件夾下的CustomControl.xaml 。則應(yīng)該在generic.xaml里面如下寫:

  1. <ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
  3.   <ResourceDictionary.MergedDictionaries> 
  4.     <ResourceDictionary Source="/Slippor.Controls;component/CustomControl/CustomControl.xaml"/> 
  5.   </ResourceDictionary.MergedDictionaries> 

</ResourceDictionary>這一方法適用于Silverlight 3及Silverlight 4。

原文作者:smjack

原文地址:http://www.cnblogs.com/smjack/archive/2010/08/24/1807706.html

【編輯推薦】

  1. 全屏模式下處理Silverlight控件的兩種方式
  2. 細(xì)數(shù)Silverlight 4的十二大引人注目新特性
  3. Silverlight 4中XAML解析的變化
責(zé)任編輯:王曉東 來源: 博客園
相關(guān)推薦

2020-03-03 13:53:10

AI金融IOT

2013-04-19 10:14:24

2018-09-30 15:08:41

2009-06-08 20:13:36

Eclipse自定義控

2017-02-17 09:37:12

Android自定義控件方法總結(jié)

2021-11-18 13:40:50

物聯(lián)網(wǎng)人工智能IoT

2015-02-12 15:33:43

微信SDK

2009-08-03 13:34:06

自定義C#控件

2015-02-11 17:49:35

Android源碼自定義控件

2009-08-03 13:39:46

C#自定義用戶控件

2010-06-08 20:42:24

淘寶網(wǎng)釣魚欺詐

2015-02-12 15:38:26

微信SDK

2023-01-06 11:17:44

戴爾

2009-09-03 13:34:03

.NET自定義控件

2014-09-24 11:42:46

AndroidButton

2009-07-28 09:32:41

ASP.NET自定義控

2010-08-03 16:13:01

FlexBuilder

2011-06-20 16:03:03

Qt 控件 鼠標(biāo)

2015-01-22 15:59:07

Android源碼日期時(shí)間控件SelectTime

2009-08-10 14:16:59

ASP.NET自定義控
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)