Domanda

non v'è alcun modo per cambiare SkinID in codebehind? Ho provato durante l'impostazione di altri beni, ma non sta funzionando. La pelle non viene applicata.

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

                LoadDefaultValues();
            }
        }

Ho provato anche page.contols ciclo throught, ma in page_onpreinit evento viene raccolta controlli vuoto.

E 'possibile cambiare lo SkinID altrove che nella pagina aspx?

Grazie

È stato utile?

Soluzione

SkinID possono essere modificati solo a livello di codice o prima di OnPreInit - l'unica opzione per avviare questo per un controllo è in della pagina OnPreInit .

In circostanze normali, .Controls dovrebbe essere disponibile in quella fase.

In alcuni casi, è necessario il seguente work-around per .Master pagine:

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

            InvokeControlPreInit(Controls);

È ora possibile avere controlli che devono scuoiatura attuare alcune interfaccia (IRuntimeSkinableControl) che permette loro di assegnare la propria pelle:

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

Il controllo si applicherebbe in questo modo:

public class UserControl : System.Web.UI.UserControl, IRuntimeSkinableControl
{
    public virtual void OnPreInit()
    {
        //assign this.SkinID
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top