質問
codeBehindでskinIdを変更する方法はありますか?他のプロパティの設定中に試してみましたが、うまくいきません。スキンは適用されません。
public GlobalImageButtonType Skin {
get { return _skin; }
set
{
_skin = value;
this.SkinID = _skin.ToString();
this.CommandName = _skin.ToString();
LoadDefaultValues();
}
}
また、page.contols をループしようとしましたが、page_onpreinit イベントではコントロール コレクションが空です。
aspx ページ以外の場所で SkinId を変更することはできますか?
ありがとう
解決
スキンID プログラムによって変更できるのは、それ以前のみです OnPreInit - コントロールに対してこれを開始する唯一のオプションは、ページの OnPreInit.
通常の状況下で、 .コントロール その段階で利用可能になるはずです。
場合によっては、次の回避策が必要になります。 。マスター ページ:
/*
* 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