我想创建一个如下所示的服务器控件:
<%@ Register Assembly="MdsAccordionMenu" Namespace="MdsAccordionMenu" TagPrefix="cc1" %>
<cc1:MdsAccordionMenu ID="MdsAccordionMenu1" runat="server">
<MdsAccordionMenuItem Title="Some Title">
<MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" />
<MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" />
<MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" />
<MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" />
</MdsAccordionMenuItem>
</cc1:MdsAccordionMenu> 我写了以下c#代码,但它不能工作:
MdsAccordionMenu.cs:
namespace MdsAccordionMenu
{
[ToolboxData("<{0}:MdsAccordionMenu runat=server></{0}:MdsAccordionMenu>")]
[ParseChildren(true, "MdsAccordionMenuItems")]
[DefaultProperty("MdsAccordionMenuItems")]
[Serializable]
public class MdsAccordionMenu : WebControl
{
[Description("سرعت نمایش انیمیشن")]
[DefaultValue(500)]
public int AnimationSpeed { get; set; }
[Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
public List<MdsAccordionMenuItem> MdsAccordionMenuItems { get; set; }
}
}MdsAccordionMenuItem.cs:
namespace MdsAccordionMenu
{
//[TypeConverter(typeof(ExpandableObjectConverter))]
[ParseChildren(true, "MdsAccordionItems")]
[DefaultProperty("Title")]
[Serializable]
public class MdsAccordionMenuItem
{
[Description("تیتر منو")]
[DefaultValue("Title")]
[NotifyParentProperty(true)]
public string Title { get; set; }
[Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
[NotifyParentProperty(true)]
public List<MdsAccordionItem> MdsAccordionItems { get; set; }
}
}MdsAccordionItem .cs:
namespace MdsAccordionMenu
{
[Serializable]
public class MdsAccordionItem : INamingContainer
{
[NotifyParentProperty(true)]
[Description("متن")]
public string Text { get; set; }
[NotifyParentProperty(true)]
[Description("آدرس لینک منو")]
public string Link { get; set; }
[NotifyParentProperty(true)]
[Description("آدرس آیکون")]
public string ImageUrl { get; set; }
}
}我该怎么做呢?
发布于 2012-02-14 13:16:19
我可以解决这个问题
MdsAccordionMenu.cs
[ToolboxData("<{0}:MdsAccordionMenu runat=server></{0}:MdsAccordionMenu>")]
[ParseChildren(true, "MdsAccordionMenuItems")]
[DefaultProperty("MdsAccordionMenuItems")]
[PersistChildren(true)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Serializable]
public sealed class MdsAccordionMenu : WebControl, INamingContainer
{
#region Properties
public int AnimationSpeed { get; set; }
public string InlineStyle { get; set; }
[Bindable(true)]
[Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public MdsAccordionMenuItemsClass MdsAccordionMenuItems
{
get { return _mdsAccordionMenuItem ?? new MdsAccordionMenuItemsClass(); }
set { _mdsAccordionMenuItem = value; }
}
private MdsAccordionMenuItemsClass _mdsAccordionMenuItem;
}MdsAccordionMenuItem.cs
[Serializable]
public class MdsAccordionMenuItemsClass : List<MdsAccordionMenuItem>
{
}
[ParseChildren(true, "MdsAccordionItems")]
[PersistChildren(true)]
[Serializable]
public class MdsAccordionMenuItem : INamingContainer
{
public string Title { get; set; }
private MdsAccordionItemsClass _mdsAccordionItems;
[Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Bindable(true)]
public MdsAccordionItemsClass MdsAccordionItems
{
get { return _mdsAccordionItems ?? new MdsAccordionItemsClass(); }
set { _mdsAccordionItems = value; }
}
}MdsAccordionItem.cs
[Serializable]
public class MdsAccordionItemsClass : List<MdsAccordionItem>
{
}
[Serializable]
[ParseChildren(true, "MdsAccordionSubMenuItems")]
[PersistChildren(true)]
public class MdsAccordionItem : INamingContainer
{
public string Text { get; set; }
private bool _visible = true;
public bool Visible
{
get { return this._visible; }
set { this._visible = value; }
}
public string Link { get; set; }
public string ImageUrl { get; set; }
private MdsAccordionItemsClass _mdsAccordionSubMenuItems;
[Bindable(true)]
[Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public MdsAccordionItemsClass MdsAccordionSubMenuItems
{
get { return _mdsAccordionSubMenuItems ?? new MdsAccordionItemsClass(); }
set { _mdsAccordionSubMenuItems = value; }
}
}现在,我可以使用以下代码在设计器模式下创建控件:
<cc1:MdsAccordionMenu ID="MdsAccordionMenu1" runat="server" EnableViewState="True">
<MdsAccordionMenuItems>
<cc1:MdsAccordionMenuItem Title="Submit">
<MdsAccordionItems>
<cc1:MdsAccordionItem Text="Item 01" Link="#" ImageUrl="~/style/icons/lightbulb.png" />
<cc1:MdsAccordionItem Text="Item 02" Link="#" ImageUrl="~/style/myImages/question.png" />
<cc1:MdsAccordionItem Text="Item 03" Link="#" ImageUrl="~/style/myImages/request-knowledge.png" />
<cc1:MdsAccordionItem Text="Item 04" Link="#" ImageUrl="~/style/myImages/document.png" />
<cc1:MdsAccordionItem Text="Item 05" Link="#" ImageUrl="~/style/myImages/book.png" />
<cc1:MdsAccordionItem Text="Item 06" Link="#" ImageUrl="~/style/myImages/document1.png" />
</MdsAccordionItems>
</cc1:MdsAccordionMenuItem>
</MdsAccordionMenuItems>
</cc1:MdsAccordionMenu>发布于 2012-02-08 19:30:56
根据您的c#代码,标记应该如下所示...
<cc1:MdsAccordionMenu ID="MdsAccordionMenu1" runat="server">
<MdsAccordionMenuItems>
<cc1:MdsAccordionMenuItem Title="hello">
<MdsAccordionItems>
<cc1:MdsAccordionItem Text="Text" Link="http://www.google.com" ImageUrl="~/Image.jpg" />
</MdsAccordionItems>
</cc1:MdsAccordionMenuItem>
</MdsAccordionMenuItems>
</cc1:MdsAccordionMenu>https://stackoverflow.com/questions/9189457
复制相似问题