有任何方法来改变skinId在代码隐藏? 我设置的其他财产中尝试过,但它不工作。皮肤不适用。

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

                LoadDefaultValues();
            }
        }

我也试过环throught page.contols,但在page_onpreinit事件是控制集合为空。

是否有可能在其他地方改变SkinId比aspx页面?

由于

有帮助吗?

解决方案

SkinID 只能以编程方式或改变之前的 OnPreInit - 您只启动此一控制选项在页面的 OnPreInit

一般情况下,的 .Controls 应可在该阶段。

在某些情况下,你需要下面的工作,周围的的.master 页:

            /*
             * 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