ASP.NET - 访问页面上的所有ImageButtons并将两个图像放在ImageButton上

时间:2012-01-27 04:29:43

标签: c# asp.net css imagebutton

我实际上有两个问题:

(1)是否可以将另一个图像放在已经设置了ImageUrl的ImageButton之上(不更改ImageUrl - 只需将第二个图像添加到顶部')?即使使用CSS?

(2)我在ListView中包含一组动态设置的ImageButtons。当用户单击ImageButton时,我会更改单击的.CssClass属性以“突出显示”它。我的问题是这样的:每当点击一个ImageButton时,我不仅要突出显示它,还要确保我 unhighlight 所有其他的。但是,我很难找到其他人。我使用

获得了点击的ImageButton
((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";
}

1 个答案:

答案 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问题太晚了。