【发布时间】:2021-10-23 15:19:22
【问题描述】:
我正在这样的中继器中创建按钮(简化):
<asp:Repeater runat="server" OnItemDataBound="Repeater_Buttons_ItemDataBound">
<ItemTemplate>
<telerik:RadButton runat="server" CssClass="myButton" ID="MyButton">
<ContentTemplate>
<...>
</ContentTemplate>
</telerik:RadButton>
</ItemTemplate>
</asp:Repeater>
这些按钮使用 :after 伪样式来创建在此按钮背景中滑动的彩色背景
.myButton {
...
}
.myButton::after {
content: "";
display: block;
width: 45px;
height: 45px;
background-color: var(--myColor);
position: absolute;
left: 0;
top: 0;
transition: 400ms all;
z-index: 1;
}
结果如下所示:
我的问题是,我需要根据项目边界动态更改此 :after 内容的颜色。
我可以访问 ItemDataBound 上的 RadButton,我试图通过 Attributes 更改它但没有成功。
protected void Repeater_Buttons_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var currentItem = (e.Item.DataItem as MyItem);
var radButton = (e.Item.FindControl("MyButton") as RadButton);
// whishful function I need:
radButton.After.BackgroundColor = currentItem.BackColor;
// or something like
radButton.Attributes.Add("style:after", $"background-color: {currentItem.BackColor}");
}
}
如果不成功,也可以通过 javascript 方法。我无法创建不同的 css 类硬编码,因为可以为不同的项目选择任何颜色
【问题讨论】:
标签: c# css asp.net code-behind asprepeater