关注xslt中的代码(我删除了不相关的部分,get-textblock更长,并且有很多参数都正确传递):
<xsl:template name="get-textblock">
<xsl:param name="style"/>
<xsl:element name="Border">
<xsl:if test="$style='{StaticResource LabelText}'" >
<xsl:attribute name="Background">#FF3B596E</xsl:attribute>
</xsl:if>
<xsl:attribute name="Background">#FF3B5940</xsl:attribute>
</xsl:element>
</xsl:template>
style参数可以是'{StaticResource LabelText}'或'{StaticResource ValueText}',边框的背景取决于该值。
但是,如果结构失败,它总是在我的output.xaml文件中绘制FF3B5940边框。 我这样称呼模板:
<xsl:call-template name="get-textblock">
<xsl:with-param name="style">{StaticResource LabelText}</xsl:with-param>
</xsl:call-template>
任何人都会看到可能出现的问题?感谢。
答案 0 :(得分:7)
该行:
<xsl:attribute name="Background">#FF3B5940</xsl:attribute>
不受条件检查的保护,因此它将始终执行。
使用此:
<xsl:if test="$style='{StaticResource LabelText}'">
<xsl:attribute name="Background">#FF3B596E</xsl:attribute>
</xsl:if>
<xsl:if test="not($style='{StaticResource LabelText}')">
<xsl:attribute name="Background">#FF3B5940</xsl:attribute>
</xsl:if>
或xsl:choose
<xsl:choose>
<xsl:when test="$style='{StaticResource LabelText}'">
<xsl:attribute name="Background">#FF3B596E</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="Background">#FF3B5940</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
答案 1 :(得分:4)
如果在一个元素上下文中多次使用<xsl:attribute/>
,则只有最后一个将应用于结果元素。
您可以使用<xsl:attribute/>
分隔<xsl:choose/>
个说明,或者在<xsl:attribute/>
之前定义一个<xsl:if/>
- 默认情况下会使用它:
<xsl:choose>
<xsl:when test="$style='{StaticResource LabelText}'">
<xsl:attribute name="Background">#FF3B596E</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="Background">#FF3B5940</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
或
<xsl:attribute name="Background">#FF3B5940</xsl:attribute>
<xsl:if test="$style='{StaticResource LabelText}'" >
<xsl:attribute name="Background">#FF3B596E</xsl:attribute>
</xsl:if>
答案 2 :(得分:2)
在XSLT 2.0中:
<xsl:template name="get-textblock">
<xsl:param name="style"/>
<Border Background="{if ($style='{StaticResource LabelText}')
then '#FF3B596E'
else '#FF3B5940'}"/>
</xsl:template>