TemplateContainerAttribute 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
声明属性的容器控件的基类型,该属性返回 ITemplate 接口并用 TemplateContainerAttribute 特性进行标记。 具有 ITemplate 属性的控件必须实现 INamingContainer 接口。 此类不能被继承。
public ref class TemplateContainerAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Property)]
public sealed class TemplateContainerAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Property)>]
type TemplateContainerAttribute = class
inherit Attribute
Public NotInheritable Class TemplateContainerAttribute
Inherits Attribute
- 继承
- 属性
示例
下面的代码示例演示如何创建命名 TemplatedFirstControl
的模板化控件并将其与名为 FirstTemplateContainer
的容器相关联。 这样,就可以创建自定义控件,这些控件在未指定模板时显示服务器时间,并在指定模板时显示模板的内容。
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
namespace Samples.AspNet.CS.Controls
{
[ParseChildren(true)]
public class TemplatedFirstControl : Control, INamingContainer
{
private ITemplate firstTemplate;
private String text = null;
private Control myTemplateContainer;
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
protected override void OnDataBinding(EventArgs e)
{
EnsureChildControls();
base.OnDataBinding(e);
}
[TemplateContainer(typeof(FirstTemplateContainer))]
public ITemplate FirstTemplate
{
get
{
return firstTemplate;
}
set
{
firstTemplate = value;
}
}
public String Text
{
get
{
return text;
}
set
{
text = value;
}
}
public String DateTime
{
get
{
return System.DateTime.Now.ToLongTimeString();
}
}
public Control MyTemplateContainer
{
get
{
return myTemplateContainer;
}
}
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
protected override void CreateChildControls()
{
if (FirstTemplate != null)
{
myTemplateContainer = new FirstTemplateContainer(this);
FirstTemplate.InstantiateIn(myTemplateContainer);
Controls.Add(myTemplateContainer);
}
else
{
Controls.Add(new LiteralControl(Text + " " + DateTime));
}
}
}
public class FirstTemplateContainer : Control, INamingContainer
{
private TemplatedFirstControl parent;
public FirstTemplateContainer(TemplatedFirstControl parent)
{
this.parent = parent;
}
public String Text
{
get
{
return parent.Text;
}
}
public String DateTime
{
get
{
return parent.DateTime;
}
}
}
}
' File name:templatecontainerattribute.vb.
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Collections
Namespace Samples.AspNet.VB.Controls
<ParseChildren(True)> _
Public Class VB_TemplatedFirstControl
Inherits Control
Implements INamingContainer
Private _firstTemplate As ITemplate
Private [_text] As [String] = Nothing
Private _myTemplateContainer As Control
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Protected Overrides Sub OnDataBinding(ByVal e As EventArgs)
EnsureChildControls()
MyBase.OnDataBinding(e)
End Sub
Public Property FirstTemplate() As ITemplate
Get
Return _firstTemplate
End Get
Set(ByVal value As ITemplate)
_firstTemplate = Value
End Set
End Property
Public Property [Text]() As [String]
Get
Return [_text]
End Get
Set(ByVal value As [String])
[_text] = Value
End Set
End Property
Public ReadOnly Property DateTime() As [String]
Get
Return System.DateTime.Now.ToLongTimeString()
End Get
End Property
Public ReadOnly Property MyTemplateContainer() As Control
Get
Return _myTemplateContainer
End Get
End Property
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Protected Overrides Sub CreateChildControls()
If Not (FirstTemplate Is Nothing) Then
_myTemplateContainer = New VB_FirstTemplateContainer(Me)
FirstTemplate.InstantiateIn(_myTemplateContainer)
Controls.Add(_myTemplateContainer)
Else
Controls.Add(New LiteralControl([Text] + " " + DateTime))
End If
End Sub
End Class
Public Class VB_FirstTemplateContainer
Inherits Control
Implements INamingContainer
Private _parent As VB_TemplatedFirstControl
Public Sub New(ByVal parent As VB_TemplatedFirstControl)
Me._parent = parent
End Sub
Public ReadOnly Property [Text]() As [String]
Get
Return _parent.Text
End Get
End Property
Public ReadOnly Property DateTime() As [String]
Get
Return _parent.DateTime
End Get
End Property
End Class
End Namespace 'CustomControls
以下 Web 窗体演示如何使用在前面的代码示例中创建的自定义控件。 页面上放置了 TemplatedFirstControl
两个实例:
第一个实例包括模板
<FirstTemplate>
。第二个实例不包括
<FirstTemplate>
;因此,它只显示时间。
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Reflection" %>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls" Assembly="Samples.AspNet.CS.Controls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
// <Snippet3>
// Get the class type for which to access metadata.
Type clsType = typeof(TemplatedFirstControl);
// Get the PropertyInfo object for FirstTemplate.
PropertyInfo pInfo = clsType.GetProperty("FirstTemplate");
// See if the TemplateContainer attribute is defined for this property.
bool isDef = Attribute.IsDefined(pInfo, typeof(TemplateContainerAttribute));
// Display the result if the attribute exists.
if (isDef)
{
TemplateContainerAttribute tca =
(TemplateContainerAttribute)Attribute.GetCustomAttribute(pInfo, typeof(TemplateContainerAttribute));
Response.Write("The binding direction is: " + tca.BindingDirection.ToString());
}
// </Snippet3>
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>TemplateContainerAttribute Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<aspSample:TemplatedFirstControl id="TemplatedFirstControl1" runat="server">
<FirstTemplate>This is the first template.</FirstTemplate>
</aspSample:TemplatedFirstControl>
<br />
<aspSample:TemplatedFirstControl id="TemplatedFirstControl2" runat="server">
</aspSample:TemplatedFirstControl>
</div>
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Reflection" %>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB.Controls" Assembly="Samples.AspNet.VB.Controls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
' <Snippet3>
' Get the class type for which to access metadata.
Dim clsType As Type = GetType(VB_TemplatedFirstControl)
' Get the PropertyInfo object for FirstTemplate.
Dim pInfo As PropertyInfo = clsType.GetProperty("FirstTemplate")
' See if the TemplateContainer attribute is defined for this property.
Dim isDef As Boolean = Attribute.IsDefined(pInfo, GetType(TemplateContainerAttribute))
' Display the result if the attribute exists.
If isDef Then
Dim tca As TemplateContainerAttribute = CType(Attribute.GetCustomAttribute(pInfo, GetType(TemplateContainerAttribute)), TemplateContainerAttribute)
Response.Write("The binding direction is: " & tca.BindingDirection.ToString())
End If
' </Snippet3>
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>TemplateContainerAttribute Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<aspSample:VB_TemplatedFirstControl id="TemplatedFirstControl1" runat="server">
<FirstTemplate>This is the first template.</FirstTemplate>
</aspSample:VB_TemplatedFirstControl>
<br />
<aspSample:VB_TemplatedFirstControl id="TemplatedFirstControl2" runat="server">
</aspSample:VB_TemplatedFirstControl>
</div>
</form>
</body>
</html>
注解
Type作为对象参数TemplateContainerAttribute传入的对象由分析器用作数据绑定表达式中使用的对象类型Container。 其属性返回 ITemplate 接口且标记有接口的 TemplateContainerAttribute控件必须实现 INamingContainer 该接口。
有关使用属性的详细信息,请参阅 “属性”。
构造函数
TemplateContainerAttribute(Type) |
使用指定的容器类型初始化 TemplateContainerAttribute 类的新实例。 |
TemplateContainerAttribute(Type, BindingDirection) |
使用指定的容器类型和 BindingDirection 属性初始化 TemplateContainerAttribute 类的新实例。 |
属性
BindingDirection |
获取容器控件的绑定方向。 |
ContainerType |
获取容器控件类型。 |
TypeId |
在派生类中实现时,获取此 Attribute 的唯一标识符。 (继承自 Attribute) |
方法
Equals(Object) |
返回一个值,该值指示此实例是否与指定的对象相等。 (继承自 Attribute) |
GetHashCode() |
返回此实例的哈希代码。 (继承自 Attribute) |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
IsDefaultAttribute() |
在派生类中重写时,指示此实例的值是否是派生类的默认值。 (继承自 Attribute) |
Match(Object) |
当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (继承自 Attribute) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |
显式接口实现
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
将一组名称映射为对应的一组调度标识符。 (继承自 Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
检索对象的类型信息,然后可以使用该信息获取接口的类型信息。 (继承自 Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
检索对象提供的类型信息接口的数量(0 或 1)。 (继承自 Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
提供对某一对象公开的属性和方法的访问。 (继承自 Attribute) |