我实际上有两个问题:
(1)是否可以将另一个图像放在已经设置了ImageUrl的ImageButton之上(不更改ImageUrl - 只需将第二个图像添加到顶部')?即使使用CSS?
(2)我在ListView中包含一组动态设置的ImageButtons。当用户单击ImageButton时,我会更改单击的.CssClass
属性以“突出显示”它。我的问题是这样的:每当点击一个ImageButton时,我不仅要突出显示它,还要确保我 unhighlight 所有其他的。但是,我很难找到其他人。我使用
((ImageButton)sender).CssClass = "SelectedImageButton";
在事件处理程序中。但是,我如何获得所有其他人,以便我可以将他们的风格“重新”设置为不亮的风格?
提前感谢您的帮助!
更新:已回答! 我已经使用以下算法解决了(2)中提到的问题。注意,我在下面将@ OFConsulting的答案标记为正确的答案,因为如果没有他的算法,我将永远不会得到以下算法(这来自于略微调整他的算法)。谢谢@OFConsulting!
// Cast the sender to an ImageButton to have the clicked ImageButton
ImageButton clickedImageButton = sender as ImageButton;
// The ListView has ListViewDataItems and the ImageButtons are in
// THOSE children controls, thus match on the ImageButtons' Parents' IDs
Control parentControl = clickedImageButton.Parent;
List<ListViewDataItem> allOtherImageButtons = MyListView.Controls.OfType<ListViewDataItem().AsQueryable().Where(i => i.ID != clickedImageButton.Parent.ID).ToList();
// Highlight
clickedImageButton.CssClass = "HighlightedStyle";
// Unhighlight
foreach (ListViewDataItem button in allOtherImageButtons)
{
// The ImageButton is always the 2nd child control of the ListViewDataItem
ImageButton childImageButton = (ImageButton)button.Controls[1];
childImageButton.CssClass = "NoHighlightedStyle";
}
答案 0 :(得分:0)
对于该问题的第(1)部分,在css类中设置背景图像可能会有所帮助,但您从未真正解释过为什么您无法更改ImageUrl。如果你需要它可以动态而不需要一堆脚本的麻烦,你总是可以将所有内容都放在更新面板上。
第(2)部分似乎很简单。只需对页面中的相关控件集合使用一点linq即可。
protected void ImageButton5_Click(object sender, ImageClickEventArgs e)
{
ImageButton clickImageButton = sender as ImageButton;
// This example assumes all the image buttons have the same parent.
// Tweak as needed depending on the layout of your page
Control parentControl = clickImageButton.Parent;
List<ImageButton> allOtherImageButtons = parentControl.Controls.OfType<ImageButton>().AsQueryable().Where(i => i.ID != clickImageButton.ID).ToList();
// Highlight
clickImageButton.CssClass = "WhateverHighlights";
// Unhighlight
foreach (ImageButton button in allOtherImageButtons)
{
button.CssClass = "WhateverClears";
}
}
编辑:还有一件事。确保在Page_Load(在Init期间的I.E.)之前添加动态添加的任何控件。有一些与添加控制相关的viewstate问题太晚了。