【问题标题】:How to load skins from external assemblies如何从外部程序集中加载皮肤
【发布时间】:2012-04-25 10:18:15
【问题描述】:

我正在尝试将一些自定义皮肤存储在 dll 中。并将使用它来为我的项目的 Telerik 控件设置主题。我关注了this guide,并且成功地从 dll 中获得了自定义皮肤来主题 radWindow 控件。但是对于其他控件我失败了,当我尝试对 radtabStrip 进行皮肤时,我得到了这个错误:

ID='ctl00' 的 Telerik.Web.UI.RadTabStrip 无法找到 名为“TelerikYouthful”的嵌入式皮肤。请确保 皮肤名称拼写正确并且您已添加参考 到项目中的 Telerik.Web.UI.Skins.dll 程序集。如果你想 要使用自定义皮肤,请设置 EnableEmbeddedSkins=false。

我不知道在指南中提到的下面这一行的第一个参数应该放什么

[Telerik.Web.EmbeddedSkin("Window", "BlackAndRed", typeof(RadWindow))]

谁能告诉正确的方法?

【问题讨论】:

    标签: telerik assemblies external skins


    【解决方案1】:

    创建自定义皮肤时,您需要做两部分:

    1. 声明您将使用的所有资源;
    2. 注册皮肤。

    如果你对嵌入式资源和/或网络资源不熟悉,建议你从以下文章入手:

    1. 关于嵌入式资源的一般文章 -- http://www.codeproject.com/Articles/3089/Understanding-Embedded-Resources-in-Visual-Studio
    2. 关于网络资源的文章 -- http://www.codeproject.com/Articles/12997/WebResource-ASP-NET-2-0-explained

    声明资源

    现在我们在同一个页面上寻找网络资源,让我们开始吧。

    如文章中所述,完全限定的资源名称是 DefaultNameSpace.[Path.To.File.].FileName,文件路径是可选的,例如您可以将所有文件放在项目的根目录中。

    您的皮肤组装项目的默认命名空间可通过右键单击 -> 属性菜单获得。

    文件夹路径虽然是可选的,但很好,因为它有助于在单个程序集中处理多个皮肤。假设您的皮肤名称是“TelerikYouthful”,那么您的项目根目录中应该有一个名为“TelerikYouthful”的文件夹。

    在其中,您必须有一个名为“Window.TelerikYouthful.css”的文件。添加文件时,请确保设置正确的构建类型:右键单击 -> 属性,将构建类型设置为 Embedded Resource。

    设置完这两个之后,就该声明资源了。同样,您可以使用单个文件,但我更喜欢使用单独的文件。在项目的根目录中,创建一个文件 RadWindow.Skins.cs

    在其中添加以下行:

    using System.Web.UI;
    
    #region TelerikYouthful 
    [assembly: WebResource("CustomSkinAssembly.TelerikYouthful.Window.TelerikYouthful.css", "text/css", PerformSubstitution = true)]
    #endregion
    

    需要使用,因此您不必每次都编写 System.Web.UI.WebResource。然后是完全限定的资源名称:我的默认命名空间是 CustomSkinAssembly;我的路径是 TelerikYouthful,文件名是 Window.TelerikYouthful.css

    类型字符串很明显。

    需要执行替换,以便您可以引用 CSS 文件中的网络资源。

    您现在可以构建您的项目,并使用 Reflector、JustDecompile、DotPeek 等工具检查输出 DLL,以检查文件是否确实嵌入。

    注册皮肤

    接下来您需要注册皮肤。为此,您需要在您的默认命名空间中添加您想要皮肤的控件的类,并使用 EmbeddedSkin 属性注释该类,例如:

    using System.Web.UI;
    using Telerik.Web;
    
    #region TelerikYouthful 
    [assembly: WebResource("CustomSkinAssembly.TelerikYouthful.Window.TelerikYouthful.css", "text/css", PerformSubstitution = true)]
    #endregion
    
    namespace CustomSkinAssembly
    {
        [EmbeddedSkin("Window", "TelerikYouthful", typeof(RadWindow))]
        public class RadWindow
        {
        }
    }
    

    注意:我为 Telerik.Web 添加了一个 using,因此我们不会一直使用 Telerik.Web.EmbeddedSkin。

    现在您可以构建项目并且应该可以使用皮肤了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2011-01-31
      • 2017-04-27
      • 2016-09-12
      • 2015-04-18
      相关资源
      最近更新 更多