代码之家  ›  专栏  ›  技术社区  ›  joshb

ASP.NET主题外观

  •  2
  • joshb  · 技术社区  · 16 年前

    是否有一种方法可以将皮肤仅应用于特定类型和特定ID的控件?例如,我在一个用来显示我们公司电话号码的站点上有如下控件:

    <asp:Label ID="PhoneLabel" runat="server"></asp:Label>
    

    我想知道是否可以通过编程设置主题,并使用该主题的外观来设置标签的文本属性。

    我知道我能做到

    <asp:Label runat="server" Text="319-867-5309"></asp:Label>
    

    但这将为网站上的所有标签设置文本。我只想为ID为PhoneLabel的标签设置文本。

    我也知道skinid属性,但它似乎将我的控件绑定到一个特定的皮肤,不允许我通过应用其他主题来更改电话号码文本。

    是否不可能用主题/皮肤来实现这一点?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Greg    16 年前

    是的,可以使用外观文件设置文本,并在不同主题中具有不同的文本。

    假设您的项目中有两个主题:“主题1”和“主题2”。在每个主题中,都有一个名为“default.skin”的文件。

    在您设置的theme1/default.skin文件中

    <asp:Label runat="server" SkinID="PhoneLabel" Text="319-867-5309"></asp:Label>
    

    在您设置的theme2/default.skin文件中

    <asp:Label runat="server" SkinID="PhoneLabel" Text="555-555-5555"></asp:Label>
    

    在您的ASPX文件中设置

    <asp:Label ID="PhoneLabel" SkinID="PhoneLabel" runat="server"></asp:Label>
    

    在web.config或aspx页面中,如果需要第一个数字,则将样式表主题设置为“Theme1”,如果需要第二个数字,则将样式表主题设置为“Theme2”。

    ——

    既然我已经回答了这个问题,我想建议皮肤/主题可能不是最好的方法。还有其他的解决方案,例如创建一个自定义电话号码控件,从基础数据源中提取电话号码或使用资源文件。

        2
  •  3
  •   M4N    16 年前

    如果您只想显示电话号码(并且希望能够全局更改),那么以下两种方法可能更容易:


    从web.config文件中读取电话号码,例如:

    <asp:Label runat="server" Text="<%$ AppSettings:PhoneNumber %>"/>
    

    并将电话号码放入web.config的appsettings部分:

    <appSettings>
      <add key="phoneNumber" value="12344"/>
    

    从标签派生一个类,在该类中,将文本属性设置为电话号码(硬编码或从配置读取等)。然后,每当您想显示电话号码时,使用该控件而不是标准标签控件,例如:

    将其放入应用程序代码:

    namespace MyControls
    {
        public class PhoneNumberLabel : Label
        {
            public override string Text
            {
                get { return "123456"; }
                set { base.Text = value; }
            }
        }
    }
    

    然后使用该控件显示电话号码:

    <%@ Register Assembly="App_Code" Namespace="MyControls" TagPrefix="my" %>
    ....
    <my:PhoneNumberLabel runat="server"></my:PhoneNumberLabel>
    
        3
  •  0
  •   ElvisLives    16 年前

    据我所知,你不能用主题和皮肤来做这个。无法设置与主题无关的ID、文本等属性。只能在控件类中将ThemeableAttribute属性设置为true的属性设置为true。

    http://msdn.microsoft.com/en-us/library/ykzx33wh.aspx

    推荐文章