我需要从自定义控件中添加到页面。我不能使用样式表(.css),因为我正在使用url(...)并需要解析url。
现在我正在做:
Page.Header.Controls.Add(new LiteralControl("<style type='text/css'>.xyz { color: blue; }</style>"));
但我希望触摸更优雅的东西?
答案 0 :(得分:3)
我想这对问题来说并不是一个糟糕的解决方案。如果你有一个外部样式表文件,这段代码将完成工作:
HtmlLink cssRef = new HtmlLink();
cssRef.Href = "styles/main.css";
cssRef.Attributes["rel"] = "stylesheet";
cssRef.Attributes["type"] = "text/css";
Page.Header.Controls.Add(cssRef);
另一个想法是编写您自己的ASP.NET ServerControl “HtmlInlineStyle”,这样您就可以这样调用它(脚本标记将由您的服务器控件完成):
Page.Header.Controls.Add(
New HtmlInlineStyle(".xyz { width:300px;padding-left:10px }");
这个blog entry和评论显示了一些替代方案(ScriptManager.RegisterClientScriptBlock)。但在我看来,你的解决方案还可以。
答案 1 :(得分:1)
这是另一种方式......例如:
父ASPX部分:
<div id="div1" class="xyz" style="width: 40px; height: 40px;">
<span>abc</span>
</div>
在控制中:
Dim xyzStyle As New Style()
xyzStyle.CssClass = "xyz"
xyzStyle.BackColor = Drawing.Color.LightBlue
Page.Header.StyleSheet.CreateStyleRule(xyzStyle, Nothing, ".xyz")
请注意,这假定父ASPX页面具有为目标控件设置的类属性。如果没有,那么您需要使用MergeStyle方法将样式与控件合并。 (这要求控件为runat="server"
)。
此代码呈现以下输出:(为方便起见,显示整个源代码)
<html>
<head>
<title>Untitled Page </title>
<style type="text/css">
.xyz { background-color:LightBlue; }
</style>
</head>
<body>
<form name="form1" method="post" action="MyPage.aspx" id="form1">
<div id="div1" class="xyz" style="width: 40px; height: 40px;">
<span>abc</span>
</div>
</form>
</body>
</html>
答案 2 :(得分:0)
我创建自己的类并继承Style,使用我自己的字典来表示默认Style类不包含的属性。这是一个简短的例子......
protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver)
{
Dictionary<String, String> _styles = new Dictionary<string, string>();
_styles.Add("display", "inline-block");
foreach (String s in _styles.Keys)
{
attributes[s] = (String)_styles[s];
}
base.FillStyleAttributes(attributes, urlResolver);
}