Telerik控件,如何从外部组件加载外观?

时间:2012-04-25 10:18:16

标签: telerik assemblies external skins

我正在尝试在dll中存储一些自定义皮肤。并将其用于我的project.i的主题telerik控件。遵循此链接中的指南

http://www.telerik.com/help/aspnet-ajax/introduction-skins-external-assembly.htm

我成功获取自定义皮肤来控制dll的radWindow控件。但是对于其他控件我失败了,当我尝试皮肤radtabStrip我得到这个错误

  

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

我不知道在指南

中提到的这一行的第一个参数是什么
  

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

有人能说出正确的方法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

答案有点长,所以请光临我。

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

  1. 声明您要使用的所有资源;
  2. 注册皮肤。
  3. 如果您不熟悉嵌入式资源和/或网络资源,我建议您从以下文章开始:

    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
    3. 声明资源

      现在我们在网页资源的同一页面上,让我们开始吧。

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

      右侧点击 - >可以获得外观装配项目的默认命名空间。属性菜单。

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

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

      设置完这两个之后,是时候申报资源了。同样,您可以使用单个文件,但我更喜欢单独使用。在项目的根目录中,创建一个文件 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文件中引用Web资源。

      您现在可以构建项目并使用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添加了一个使用,所以我们不会一直使用Telerik.Web.EmbeddedSkin。

      现在你可以构建项目了,你应该能够使用皮肤。