Вопрос

есть ли какой-нибудь способ изменить skinId в codeBehind?Я попробовал это во время настройки другого свойства, но это не работает.На кожу не наносится.

public GlobalImageButtonType Skin {
            get { return _skin; }
            set 
            {
                _skin = value;
                this.SkinID = _skin.ToString();
                this.CommandName = _skin.ToString();

                LoadDefaultValues();
            }
        }

Я также попробовал выполнить цикл через page.contols, но в событии page_onpreinit коллекция элементов управления пуста.

Можно ли изменить SkinId в другом месте, кроме как на странице aspx?

Спасибо

Это было полезно?

Решение

СкинИД может быть изменен программно только на или до ОнПреИнит - ваш единственный вариант инициировать это для элемента управления находится в ОнПреИнит.

При нормальных обстоятельствах, .Элементы управления должно быть доступно на этом этапе.

В некоторых случаях вам потребуется следующий обходной путь для .мастер страницы:

            /*
             * HACK: need to ensure master controls are instantiated first.
             * */
            MasterPage root = this.Master;
            while (root.Master != null)
                root = root.Master;

            InvokeControlPreInit(Controls);

Теперь у вас могут быть элементы управления, которым требуется скининг, реализующие некоторый интерфейс (IRuntimeSkinableControl), который позволяет им назначать свои собственные скины:

    private void InvokeControlPreInit(ControlCollection controls)
    {
        foreach (Control control in controls)
        {
            IRuntimeSkinableControl skinableControl;

            if (null != (skinableControl = control as IRuntimeSkinableControl))
                skinableControl.OnPreInit();

            if (string.IsNullOrEmpty(control.SkinID) && control.Controls.Count > 0)
                InvokeControlPreInit(control.Controls);
        }
    }

Элемент управления будет применять это следующим образом:

public class UserControl : System.Web.UI.UserControl, IRuntimeSkinableControl
{
    public virtual void OnPreInit()
    {
        //assign this.SkinID
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top