来自参数的XSL动态元素名称

时间:2014-03-17 21:44:55

标签: xml xaml xslt

我想制作一个在XAML中自动生成渐变背景的xsl模板。为了做到这一点,我有一个参数$ control,它应该在元素名称中连接到'.Background'。示例:我有一个Canvas要添加渐变背景,我必须添加一个元素“Canvas.Background”。出于某种原因,无论我如何调整它,这种连接都会失败。

<xsl:template name="get-gradient-background">
 <xsl:param name="control"/>
 <xsl:param name="start-color"/>
 <xsl:param name="end-color"/>
 <xsl:param name="offset" select="1"/>
  <xsl:element name="concat($control, '.Background)">
<xsl:element name="LinearGradientBrush">
 <xsl:element name="GradientStop">
  <xsl:attribute name="Color"><xsl:value-of select="$start-color"/></xsl:attribute>
     </xsl:element>
<xsl:element name="GradientStop">
 <xsl:attribute name="Color"><xsl:value-of select="$end-color"/></xsl:attribute>
     <xsl:attribute name="Offset"><xsl:value-of select="$offset"/></xsl:attribute>
</xsl:element>
   </xsl:element>
  </xsl:element>
</xsl:template>

预期结果(对于画布):

     <Canvas.Background>
      <LinearGradientBrush>
       <GradientStop Color="#FF93C5E8" />
       <GradientStop Color="#FF3B596E" Offset="1" />
      </LinearGradientBrush>
     </Canvas.Background>

编辑:

<xsl:template name="get-gradient-background">
 <xsl:param name="control"/>
 <xsl:param name="start-color"/>
 <xsl:param name="end-color"/>
 <xsl:param name="offset" select="1"/>
 <xsl:element name="concat({$control}, '.Background)">
  <xsl:element name="LinearGradientBrush">
   <xsl:element name="GradientStop">
    <xsl:attribute name="Color">
     <xsl:value-of select="$start-color"/>
    </xsl:attribute>
   </xsl:element>
   <xsl:element name="GradientStop">
    <xsl:attribute name="Color">
     <xsl:value-of select="$end-color"/>
    </xsl:attribute>
    <xsl:attribute name="Offset">
     <xsl:value-of select="$offset"/>
    </xsl:attribute>
   </xsl:element>
  </xsl:element>
 </xsl:element>
</xsl:template>

我尝试过的另一件事:

<xsl:element name="{concat($control, '.Background)}">

1 个答案:

答案 0 :(得分:1)

如果您使用的是变量,则元素名称必须包含在属性值模板(Curly Brackets)中

<xsl:element name="{concat($control, '.Background')}">