Ste*_*fan 8 sandcastle silverlight wpf dependency-properties xml-documentation
记录依赖属性的最佳方法是什么?
我应该在字段上放置xml文档:
/// <summary>Documentation goes here</summary>
public static readonly DependencyProperty NameProperty =
DependencyProperty.Register(...)
Run Code Online (Sandbox Code Playgroud)
或在酒店:
/// <summary>and/or here?</summary>
public string Name{ get{...} set{...} }
Run Code Online (Sandbox Code Playgroud)
还是我真的需要记录(和维护)两者?
好吧,这就是我想出的。
我在依赖属性中使用特殊的 xml 标记,该标记将被 xsl 转换替换。没有它也可以做到这一点,但随后 Visual Studio 会发出警告,因为该字段似乎未记录。
/// <dpdoc />
public static readonly DependencyProperty PositionProperty =
DependencyProperty.Register(...)
Run Code Online (Sandbox Code Playgroud)
C# 属性照常记录,只需确保不要忘记值描述。
/// <summary>Gets or sets the position of this element</summary>
/// <value>Position (in pixel) relative to the parent's upper left corner.</value>
/// <remarks><para>
/// If either the <c>x</c> or <c>y</c> component is <c>+inf</c> this indicates...
/// </para></remarks>
public Point Position{ get{...} set{...} }
Run Code Online (Sandbox Code Playgroud)
Visual Studio 在构建过程中根据这些注释创建一个 xml 文件。通过一点点 xsl 转换,该dpdoc节点将被属性文档的修改版本所取代。生成的 xml 文件与我们很好地记录了属性标识符一样。它甚至包括一个简短的注释,表明有另一种访问变量的方法:
/// <summary>Position (in pixel) relative to the parent's upper left corner.</summary>
/// <remarks><para>
/// If either the <c>x</c> or <c>y</c> component is <c>+inf</c> this indicates...
/// <para>
/// This dependency property can be accessed via the <see cref="Position"/> property.
/// </para>
/// </para></remarks>
public static readonly DependencyProperty PositionProperty =
DependencyProperty.Register(...)
Run Code Online (Sandbox Code Playgroud)
这样,两个 API 都有适当的文档,我们不需要在代码中重复文档。xsl 转换可以在构建后事件中完成,也可以集成到文档生成过程中。
这是 xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="//dpdoc">
<xsl:variable name="propertyName" select="concat('P:', substring(../@name,3,string-length(../@name)-10))" />
<summary>
<xsl:apply-templates select="//member[@name=$propertyName]/value/node()"/>
</summary>
<xsl:apply-templates select="//member[@name=$propertyName]/*[not(self::remarks)][not(self::summary)][not(self::value)]"/>
<remarks>
<xsl:apply-templates select="//member[@name=$propertyName]/remarks/node()"/>
<para>
This dependency property can be accessed via the
<see>
<xsl:attribute name="cref"><xsl:value-of select="$propertyName"/></xsl:attribute>
</see>
property.
</para>
</remarks>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
为什么我想这样:
DependencyProperty实例)和属性都是公共的,因此可以合法地用于访问该属性。我们对同一个逻辑变量有两个 API。| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |