gpt4 book ai didi

c# - 创建自定义面板控件

转载 作者:太空宇宙 更新时间:2023-11-03 16:51:26 37 4
gpt4 key购买 nike

基于服务器的控件对我来说不是好的解决方案,因为默认情况下我的面板应该始终包含一个 asp 复选框,这将允许用户隐藏和显示面板内容。

我将我的面板创建为模板化用户控件,但现在我遇到了无法在其中声明变量的问题。

[ParseChildren(true)]
public partial class MyPanel: System.Web.UI.UserControl
{

private ITemplate messageTemplate = null;

[TemplateContainer(typeof(MessageContainer))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate Content
{
get
{
return messageTemplate;
}
set
{
messageTemplate = value;
}
}

void Page_Init()
{
MessageContainer container = new MessageContainer();
messageTemplate.InstantiateIn(container);
PlaceHolder1.Controls.Add(container);
}

[ParseChildren(true)]
public class MessageContainer : Control, INamingContainer
{

internal MessageContainer()
{
}

}
}

如果我在 MyPage.aspx 中执行以下操作,则控件定义不会插入到 MyPage.aspx.designer.cs 中,它们正常做:

<my:MyPanel>
<Content>
<asp:TextBox id = "foo" runat="server" />
</Content>
</my:MyPanel>

因此 foo 没有被设计者创建为控制变量,所以我无法访问它。

如何创建自己的允许在其中声明控件的面板?

编辑:我现在尝试使用 [ParseChildren(false)]。包含变量的变量现在在窗体的设计器代码中生成。现在的问题是 messageTemplate.InstantiateIn(container) 抛出异常。

最佳答案

您还没有为控件提供代码。通常,它需要实现 INamingContainer 并且应该具有 ITemplate 类型的属性来接受模板。查看MSDN关于如何开发一个。这是 sample code来自MSDN。还要检查这个 article用于数据绑定(bind)模板化控件。

关于c# - 创建自定义面板控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3838837/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com