天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Silverlight 自定義控件模板管理

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

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

  MergeDefaultStyle 法

  如果研究過 Silverlight Toolkit 的源代碼,會發(fā)現(xiàn)里面所有的自定義控件都有一個單獨的 xaml 文件來保存控件的默認樣式,當然這些文件是不起作用的。最初我以為是先用單獨的 xaml 文件來寫控件樣式,然后再拷貝到 generic.xaml 里,也就是人工同步。于是我就這么做了……最終發(fā)現(xiàn)實在是很傻很天真,人工同步比被墻的 Dropbox 還不靠譜。

  后來發(fā)現(xiàn)了 MergeDefaultStyle 這個東東,才搞清楚之前原來是被耍了。

  MergeDefaultStyle 就是通過給所有單獨的 xaml 文件應(yīng)用一種特殊的 Build 方法,在 Build 工程的時候,自動把 xaml 文件的內(nèi)容整合到 generic.xaml 里去。

  詳細的介紹請參看:http://www.jeff.wilcox.name/2009/01/default-style-task/

  重點步驟是:

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

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

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

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

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

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

<!-- Add "DefaultStyle" as a Build Action in Visual Studio -->
<
ItemGroup Condition="'$(BuildingInsideVisualStudio)'=='true'">
<
AvailableItemName Include="DefaultStyle" />
</
ItemGroup>
<!--
Merge the default styles of controls (only if any of the DefaultStyle files is
more recent than the project's generic.xaml file) before compilation
dependencies are processed.
-->
<
PropertyGroup>
<
PrepareResourcesDependsOn>
MergeDefaultStyles;
$(PrepareResourcesDependsOn);
</PrepareResourcesDependsOn>
</
PropertyGroup>
<
Target
Name="MergeDefaultStyles"
Inputs="@(DefaultStyle)"
Outputs="$(MSBuildProjectDirectory)/generic.xaml">
<
MergeDefaultStylesTask
DefaultStyles="@(DefaultStyle)"
ProjectDirectory="$(MSBuildProjectDirectory)" />
</
Target>
<!--
Touch DefaultStyles on Rebuild to force generation of generic.xaml.
-->
<
PropertyGroup>
<
RebuildDependsOn>
TouchDefaultStyles;
$(RebuildDependsOn);
</RebuildDependsOn>
</
PropertyGroup>
<
Target Name="TouchDefaultStyles">
<
Touch Files="@(DefaultStyle)" ForceTouch="true" />
</
Target>

  5. 重新 Load 你的工程。

  6. 選擇有默認樣式的單獨的 xaml ,在屬性窗口的 Build Action 里面選擇 DefaultStyle 。

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

  這一方法適用于 Silverlight 2/3/4

  MergedDictionary 法

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

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

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

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

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

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

NET技術(shù)Silverlight 自定義控件模板管理,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本xxxx裸体xxxx | 久久视频精品38线视频在线观看 | 成人国产亚洲精品A区天堂蜜臀 | 亚洲高清在线视频 | xxx88中国| 好男人好资源在线观看 | 日韩AV爽爽爽久久久久久 | 黑人特黄AA完整性大片 | 国产午夜视频在永久在线观看 | 动漫美女被爆挤奶歪歪漫画 | 亚洲午夜久久久精品电影院 | 亚洲精品无码一区二区三区四虎 | 产传媒61国产免费 | 好爽好深太大了再快一点 | 色播播影院| 日本高清片免费观看 | 九九电影伦理片 | 国产精品成人在线播放 | 久久精品国产欧美成人 | 在线观看国产精选免费 | 日韩精品亚洲专区在线电影不卡 | 久久成人免费观看全部免费 | 手机在线看片欧美亚洲 | 国产精品久久久久久久久无码 | 天天日免费观看视频一1 | 高清bblxx手机在线观看 | 欧美日韩国产码在线 | 狠狠啪 日日啪 | 无遮掩H黄纯肉动漫在线观看星 | 伊人久久大香线蕉资源 | 欧美巨大xxxx做受孕妇视频 | 人妻无码AV中文系统久久免费 | 色欲AV亚洲情无码AV蜜桃 | 久久久免费观成人影院 | 偷拍亚洲制服另类无码专区 | 总攻催眠受的高h巨肉np | 久久99精品AV99果冻 | 泡妞高手在都市免费观看 | 精品爽爽久久久久久蜜臀 | 久久精品免费看网站 | 久久综合丁香激情久久 |