我想制作一个在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)}">
答案 0 :(得分:1)
如果您使用的是变量,则元素名称必须包含在属性值模板(Curly Brackets)中
<xsl:element name="{concat($control, '.Background')}">