Frage

Gibt es eine Möglichkeit skinId in Code-Behind zu ändern? Ich versuchte es andere Eigenschaft während der Einstellung, aber es funktioniert nicht. Die Haut wird nicht angewandt.

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

                LoadDefaultValues();
            }
        }

ich auch Schleife Throught page.contols versucht, aber in page_onpreinit Ereignisse Kontrollen Sammlung leer.

Ist es möglich, die SkinID an anderer Stelle als in aspx Seite zu ändern?

Danke

War es hilfreich?

Lösung

SkinID kann nur programmatisch am oder vor dem OnPreInit geändert werden - die einzige Möglichkeit dies für eine Steuerung ist ist in der Seite zu initiieren OnPreInit .

Unter normalen Umständen .Controls sollte zu diesem Zeitpunkt zur Verfügung steht.

In einigen Fällen müssen Sie die folgende Behelfslösung für .master Seiten:

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

            InvokeControlPreInit(Controls);

Sie können nun Steuerelemente haben, die eine gewisse Schnittstelle implementieren müssen Enthäuten (IRuntimeSkinableControl), die ihnen ihre eigene Haut zuweisen können:

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

Die Steuerung gelten würde es etwa so:

public class UserControl : System.Web.UI.UserControl, IRuntimeSkinableControl
{
    public virtual void OnPreInit()
    {
        //assign this.SkinID
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top