我希望能够将用户选择的颜色和字体大小应用到Listview的LayoutTemplate中的控件,但不能使用代码块来调整样式(Codeblocks在ItemTemplate中工作得很好)。我读过一些文章,说明代码块在LayoutTemplate中不起作用(并且有第一手经验,它们不起作用)。有没有人有可靠的方法让我调整风格?我应该在某个事件处理程序中使用FindControl()并在那里添加样式吗?
答案 0 :(得分:0)
用户可以自定义的任何内容(在设计时未修复)都需要通过查找适当的控件并更改CSS类来应用于ListView。或者,您可以尝试动态地编写出针对ListView中元素类的CSS,并纯粹使用CSS更改颜色。
编辑:要动态输出CSS,请考虑使用LiteralControl,如:
protected override void OnLoad(EventArgs e)
{
var profile = GetProfile();
LiteralControl ctl = new LiteralControl(@"
<style>
.UserStyleA
{
background-color: " + profile.BackgroundColor + @";
color: " + profile.ForeColor + @";
</style>");
}
我相信然后onload,你可以附加到标题,如:
this.Page.Header.Controls.Add(ctl);
但是,在阅读Page.header属性的文档时,它有一个动态附加样式表的好例子。这似乎正是你所需要的。
http://msdn.microsoft.com/en-us/library/system.web.ui.page.header.aspx
答案 1 :(得分:0)
您可以尝试在LayoutTemplate中放置一个用户控件并将逻辑移动到所述用户控件,如下所示:
<asp:ListView ID="CustomizableList" runat="server">
<LayoutTemplate>
<custom:UserStyles runat="server" />
<div class="user-list-layout">
<asp:PlaceHolder ID="Item" />
</div>
</LayoutTemplate>
<ItemTemplate>
<asp:Label ID="Something" runat="server"
Text='<%# Eval("Something") %>'
CssClass="user-list-something" />
</ItemTemplate>
</asp:ListView>
按照Brian Mains的建议表单的回答,只使用CSS类。然后在UserStyles控件中,您可以动态生成一些将应用的CSS。
<style type="text/css" scoped>
.user-list-layout {
border-color: <%= Profile.FavoriteColor %>;
}
.user-list-something {
font-size: <%= Profile.PreferredFontSizeForSomething %>;
}
</style>
但请注意,HTML中不允许将<style>
标记添加到<body>
,但适用于所有主流浏览器。它在HTML5中允许,但只能设置scoped
属性(有关详细信息,请参阅this question)。