2

有没有办法只将皮肤应用于特定类型和特定 ID 的控件?例如,我在整个网站上都有控件,用于显示我们公司的电话号码,如下所示:

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

我想知道是否可以以编程方式设置主题并使用该主题的皮肤来设置标签的文本属性。

我知道我能做到

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

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

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

是不是不可能用主题/皮肤做到这一点?

4

3 回答 3

3

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


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

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

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

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

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

把它放在 App_Code 中:

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>
于 2009-09-22T21:08:20.900 回答
1

是的,可以使用皮肤文件设置文本并在不同的主题中使用不同的文本。

假设您的项目中有两个主题:“Theme1”和“Theme2”。在每个主题中,您都有一个名为“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 页面中,如果您想要第一个数字,则将 styleSheetTheme 设置为“Theme1”,如果您想要第二个数字,则将其设置为“Theme2”。

--

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

于 2009-09-22T20:50:07.683 回答
0

据我所知,你不能用主题和皮肤做到这一点。不能设置与主题无关的 Id、Text 等属性。您只能设置控件类中 ThemeableAttribute 属性设置为 true 的那些属性。

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

于 2009-09-22T20:27:58.710 回答