题
有任何方法来改变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
}
}
不隶属于 StackOverflow