Принятие мер для всех средств управления со свойством 'ImageUrl'

Я имею ниже части кода, который выполняет итерации посредством средств управления на веб-странице и где это - imagebutton, это изменяет imageUrl свойство. То, что я хотел бы, чтобы это сделало, проходят каждое управление и, если то управление, оказывается, имеет imageUrl свойство, то сделайте изменение. Например, нормальные изображения и т.д. были бы включены в процесс. Я получаю чувство, что дженерики или что-то могли бы быть ключом здесь, но я не являюсь сведущим в той области по меньшей мере. Какие-либо мысли?Спасибо!

        public static void AddThemePathToImages(Control Parent)
    {

        foreach (Control c in Parent.Controls)
        {
            ImageButton i = c as ImageButton;
            if (i != null)
            {
                // See if theme specific version of this file exists.  If not, point it to normal images dir.
                if (File.Exists(System.Web.HttpContext.Current.Server.MapPath("~/App_Variants/" + GetUserTheme().ToString() + "/images/" + i.ImageUrl)))
                {
                    i.ImageUrl = "~/App_Variants/" + GetUserTheme().ToString() + "/images/" + i.ImageUrl;
                }
                else
                {
                    i.ImageUrl = "~/images/" + i.ImageUrl;
                }   
            }
            if (c.HasControls())
            {
                AddThemePathToImages(c);
            }
        }
    }
1
задан Glinkot 26 July 2010 в 08:04
поделиться

3 ответа

Вы не дженерики не нужны, подойдет обычное наследование:

Поскольку ImageButton просто наследует ImageUrl от своего родительского класса Image , вы можете просто изменить свой первый бит от:

ImageButton i = c as ImageButton;

до:

Image i = c as Image;

Тогда он будет работать нормально как для Image, так и для ImageButton

Теперь, если вы хотите, чтобы он работал для любых элементов управления, у которых есть свойство ImageUrl (даже для некоторых настраиваемых элементов управления, которые не ' t унаследовано от Image), вам нужно будет использовать отражение, чтобы увидеть, имеет ли объект свойство ImageUrl, и если да, используйте его.

1
ответ дан 2 September 2019 в 22:45
поделиться

Я бы подумал о создании подкласса настраиваемого элемента управления «ThemedImageButton» , который может инкапсулировать код для установки правильного ImageUrl для каждого изображения.

Вы можете добавить переопределение OnPreRender, чтобы проверить наличие изображения и обновить свойство.

Затем вы можете выполнить простой поиск и замену в своем проекте, чтобы заменить на .

public class ThemedImageButton : ImageButton
{
    protected override OnPreRender(EventArgs e)
    {
        // See if theme specific version of this file exists.  If not, point it to          normal images dir.
            if (File.Exists(System.Web.HttpContext.Current.Server.MapPath("~/App_Variants/" + GetUserTheme().ToString() + "/images/" + i.ImageUrl)))
            {
                i.ImageUrl = "~/App_Variants/" + GetUserTheme().ToString() + "/images/" + i.ImageUrl;
            }
            else
            {
                i.ImageUrl = "~/images/" + i.ImageUrl;
            }   
    }
}

Вы также можете предоставить такое же решение для элементов управления .

1
ответ дан 2 September 2019 в 22:45
поделиться

Если у вас нет набора свойств, я думаю, что imageUrl будет пустой или пустой строкой. Попробуйте сформулировать это в формулировке «если». Думаю, это решит вашу проблему.

0
ответ дан 2 September 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: