[转载] Coolite 0.8/Ext.net1.0更换主题

 

Coolite 0.8/Ext.net1.0更换主题

分类: Coolite/Ext JS/Ext.NET 1117人阅读 评论(4) 收藏 举报

在Coolite控件中(0.8名为Coolite,1.0更名为Ext.net1.0)要更换皮肤的方法。

Ext.net 1.0的处理方案:

我在Client端使用一个ComboBox放置可供选择的主题方案,代码如下:

  1. <ext:ComboBox runat="Server" Editable="false" ID="comBoxThemes" SelectedIndex="0">  
  2.                                                   <Items>  
  3.                                                       <ext:ListItem Text="Blue Theme (Default)" Value="default" />  
  4.                                                       <ext:ListItem Text="Gray Theme" Value="gray" />  
  5.                                                       <ext:ListItem Text="Accessibility Theme" Value="access" />  
  6.                                                       <ext:ListItem Text="Slate Theme" Value="slate" />  
  7.                                                   </Items>  
  8.                                                   <Listeners>  
  9.                                                       <Select Handler="var val = comBoxThemes.getValue();Ext.net.ResourceMgr.setTheme('/extjs/resources/css/xtheme-' +val + '-embedded-css/ext.axd');  
  10.                                                      CenterPanel.items.each(function (el) {if (!Ext.isEmpty(el.iframe)) {el.iframe.dom.contentWindow.Ext.net.ResourceMgr.setTheme('/extjs/resources/css/xtheme-' + val + '-embedded-css/ext.axd');Ext.net.DirectMethods.setTheme(val);}});"  />  
  11.                                                   </Listeners>  
  12.                                               </ext:ComboBox>  

说明:

  1. Ext.net.ResourceMgr.setTheme('/extjs/resources/css/xtheme-' +val + '-embedded-css/ext.axd');  

是更换当前面的主题,

  1. CenterPanel.items.each(function (el) {if (!Ext.isEmpty(el.iframe)) {el.iframe.dom.contentWindow.Ext.net.ResourceMgr.setTheme('/extjs/resources/css/xtheme-' + val + '-embedded-css/ext.axd');  

遍历是否有IFrame页面,有则替换。

  1. Ext.net.DirectMethods.setTheme(val);  

执行服务端方法,指定现在选择的主题方案。

SetTheme方法:

  1. [DirectMethod]  
  2.       public void setTheme(string val)  
  3.       {  
  4.           Ext.Net.Theme theme = new Ext.Net.Theme();  
  5.           switch(val)  
  6.           {  
  7.               case "default":  
  8.                   theme = Ext.Net.Theme.Default;  
  9.                   break;  
  10.               case "gray":  
  11.                   theme = Ext.Net.Theme.Gray;  
  12.                   break;  
  13.               case "access":  
  14.                   theme = Ext.Net.Theme.Access;  
  15.                   break;  
  16.               case "slate":  
  17.                   theme = Ext.Net.Theme.Slate;  
  18.                   break;  
  19.           }  
  20.           SetExtTheme(theme);  
  21.       }  
  

在服务端,我的Theme方案是保存在Session中的,通过页面基类中的SetExtTheme(Ext.net theme){....}方法来指定。

页面基类PageBase.cs中关于主题的代码如下:

  1. public const string ResourceManagerId = "ExtResourceManager";  
  2.   
  3.      private void AddResourceManagerToPage()  
  4.      {  
  5.          if (Session[ResourceManagerId] == null)  
  6.          {  
  7.              Session[ResourceManagerId] = Ext.Net.Theme.Default;  
  8.          }  
  9.          ResourceManager manager = (ResourceManager)this.FindControl(ResourceManagerId);  
  10.          if (manager != null)  
  11.          {  
  12.              manager.Theme = (Ext.Net.Theme)Session[ResourceManagerId];  
  13.          }  
  14.      }  
  15.   
  16.      protected void SetExtTheme(Ext.Net.Theme theme)  
  17.      {  
  18.          Session[ResourceManagerId] = theme;  
  19.      }  
  20.   
  21.      protected override void OnPreLoad(EventArgs e)  
  22.      {  
  23.          base.OnPreLoad(e);  
  24.          AddResourceManagerToPage();  
  25.      }  

Coolite 0.8的处理方案与1.0的基本一至,只是Client的JS方法有所区别,见代码:

  1. <ext:ComboBox runat="Server" Editable="false" ID="comBoxThemes" SelectedIndex="0">  
  2.                                                        <Items>  
  3.                                                            <ext:ListItem Text="Blue Theme (Default)" Value="default" />  
  4.                                                            <ext:ListItem Text="Gray Theme" Value="gray" />  
  5.                                                            <ext:ListItem Text="Accessibility Theme" Value="access" />  
  6.                                                            <ext:ListItem Text="Slate Theme" Value="slate" />  
  7.                                                        </Items>  
  8.                                                        <Listeners>  
  9.                                                            <Select Handler="Coolite.Ext.setTheme('/extjs/resources/css/ext-all-embedded-css/coolite.axd');  
  10.                                                            CenterPanel.items.each(function (el) {if (!Ext.isEmpty(el.iframe)) {el.iframe.dom.contentWindow.Coolite.Ext.setTheme('/extjs/resources/css/ext-all-embedded-css/coolite.axd');Coolite.AjaxMethods.SetTheme('Default');}});"   />  
  11.                                                        </Listeners>  
  12.                                                    </ext:ComboBox>  

posted @ 2011-08-12 18:12  levin_jian  阅读(764)  评论(2)    收藏  举报