0

その中にいくつかの devexpress aspx コントロールを含む複合コントロール クラスを作成しています。ただし、設計時に問題があります。公開する子コントロールのプロパティを変更するたびに、子コントロールのインターフェイス/スキンが失われます (下の画像のように) ここに画像の説明を入力 上の画像は、leftlistbox、下の 2 つのボタンが aspx であることを示しています。コントロール、rightlistbox は asp コントロールです。複合コントロールの子コントロールのプロパティにアクセスして変更するたびに、上記のように、設計時にこれらの devexpress コントロールのみがインターフェイス/スキンを失います。以下は、複合コントロールのクラス ファイルです。

   [ParseChildren(true), PersistChildren(false)]
public class CompositeControl_TEST : CompositeControl, INamingContainer 
{
    private ASPxListBox leftListBox;
    private ListBox rightListBox;
    private ASPxButton lefttoright;
    private ASPxButton righttoleft;

    [Bindable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), RefreshProperties(RefreshProperties.Repaint), NotifyParentProperty(true)]
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public DevExpress.Web.ASPxEditors.ASPxListBox XF_leftListBox
    {
        get
        {
            this.EnsureChildControls();
            return leftListBox;
        }
    }

    [Bindable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), RefreshProperties(RefreshProperties.Repaint), NotifyParentProperty(true)]
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public ListBox XF_rightlistBox
    {
        get
        {
            this.EnsureChildControls();
            return rightListBox;
        }
    }

    [Bindable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), RefreshProperties(RefreshProperties.Repaint), NotifyParentProperty(true)]
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public DevExpress.Web.ASPxEditors.ASPxButton XF_left2rightButton
    {
        get
        {
            this.EnsureChildControls();
            return lefttoright;
        }
    }

    [Bindable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), RefreshProperties(RefreshProperties.Repaint), NotifyParentProperty(true)]
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public DevExpress.Web.ASPxEditors.ASPxButton XF_right2leftButton
    {
        get
        {

            this.EnsureChildControls();
            return righttoleft;
        }
    }

    protected override void RecreateChildControls()
    {    
        base.EnsureChildControls();
    }

    protected override void CreateChildControls()
    {
        this.Controls.Add(new LiteralControl(@"<div>"));
        this.Controls.Add(new LiteralControl(@"<table>"));
        this.Controls.Add(new LiteralControl(@"<tr>"));

        this.Controls.Add(new LiteralControl(@"<td>"));
        this.leftListBox = new ASPxListBox();
        this.leftListBox.ID = this.ClientID + "leftListBox";
        this.leftListBox.Items.Add("left from cs");
        this.Controls.Add(leftListBox);
        this.Controls.Add(new LiteralControl(@"</td>"));

        this.Controls.Add(new LiteralControl(@"<td>"));
        this.rightListBox = new ListBox();
        this.rightListBox.ID = this.ClientID + "rightListBox";
        //this.rightListBox.Items.Add("Right from cs");
        this.Controls.Add(rightListBox);
        this.Controls.Add(new LiteralControl(@"</td>"));
        this.Controls.Add(new LiteralControl(@"</tr>"));

        this.Controls.Add(new LiteralControl(@"<tr>"));
        this.Controls.Add(new LiteralControl(@"<td>"));
        this.lefttoright = new ASPxButton();
        lefttoright.ID = this.ClientID + "lefttoright";
        lefttoright.Text = "lefttoright";
        this.Controls.Add(lefttoright);
        this.Controls.Add(new LiteralControl(@"</td>"));

        this.Controls.Add(new LiteralControl(@"<td>"));
        this.righttoleft = new ASPxButton();
        righttoleft.ID = this.ClientID + "righttoleft";
        righttoleft.Text = "righttoleft";
        this.Controls.Add(righttoleft);
        this.Controls.Add(new LiteralControl(@"</td>"));
        this.Controls.Add(new LiteralControl(@"</tr>"));
        this.Controls.Add(new LiteralControl(@"</div>"));
        base.CreateChildControls();
    }
}

}

Web で同様の問題を検索しましたが、一致する問題が見つからないようです。

4

2 に答える 2

0

これは、コントロールのデザイン時の変更を処理する Designer をオーバーライドしていないために発生します。主要な機能をオーバーライドしているため、コントロールが引き続き適切に動作することが保証されます。たぶん、そのような複雑なレイアウトを WebUserControl を介して整理する方が良いでしょう...

于 2012-05-03T22:04:16.783 に答える