Question

est-il possible de changer SkinID en CodeBehind? Je l'ai essayé pendant la prise d'autres biens, mais il ne fonctionne pas. La peau est pas appliquée.

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

                LoadDefaultValues();
            }
        }

J'ai aussi essayé de page.contols throught en boucle, mais l'événement est page_onpreinit collection de contrôles vide.

Est-il possible de changer la SkinID ailleurs que dans la page ASPX?

Merci

Était-ce utile?

La solution

SkinID ne peut être modifié par programme ou avant onPreInit - votre seule option pour lancer ce pour un contrôle est dans la page de onPreInit .

Dans des circonstances normales, .Controls devrait être disponible à ce stade.

Dans certains cas, vous avez besoin du travail autour suivante pour .master pages:

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

            InvokeControlPreInit(Controls);

Vous pouvez maintenant avoir des contrôles qui ont besoin d'écorcher mettre en œuvre une interface (IRuntimeSkinableControl) qui leur permet d'attribuer leurs propres peaux:

    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);
        }
    }

Le contrôle s'appliquerait comme ceci:

public class UserControl : System.Web.UI.UserControl, IRuntimeSkinableControl
{
    public virtual void OnPreInit()
    {
        //assign this.SkinID
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top