XSL XAML的唯一名称

时间:2013-05-19 15:32:50

标签: xaml xslt xslt-2.0

我尝试使用XSL创建一个XAML文件,我需要的一件事就是100个文本块的唯一名称。我在for-each循环中创建Textblocks(可以工作,创建所有元素),然后尝试使用position()为每个循环赋予一个唯一的名称:

<xsl:for-each select="//value">
    <xsl:element name="TextBlock">
    <xsl:attribute name="x:Name" select="'number_txt_',position()"/>
    <xsl:attribute name="Grid.Row" select="position()+2"/>
    <xsl:attribute name="Grid.Column" select="0"/>
    <xsl:attribute name="Text" select="./@number"/>
    <xsl:attribute name="FontSize" select="20"/>
    <xsl:attribute name="Foreground" select="'Ivory'"/>
    <xsl:attribute name="HorizontalAlignment">
        <xsl:value-of select="'Center'"/>
    </xsl:attribute>
    <xsl:attribute name="VerticalAlignment">
    <xsl:value-of select="'Center'"/>
    </xsl:attribute>
</xsl:element>
</xsl:for-each>

然而,这给了我这个:

<TextBlock x:Name="number_txt_ 1" Grid.Row="3" Grid.Column="0" Text="1" FontSize="20"
             Foreground="Ivory"
             HorizontalAlignment="Center"
             VerticalAlignment="Center"/>
<TextBlock x:Name="number_txt_ 2" Grid.Row="4" Grid.Column="0" Text="2" FontSize="20"
             Foreground="Ivory"
             HorizontalAlignment="Center"
             VerticalAlignment="Center"/>

以及所有TextBlocks等等。注意“number_txt_”和数字之间的空格。

我想在C#silverlight项目中使用这个文件,但是这不允许使用ax:Name中的空格,也不允许单个数字(我只用计数器试过它,不起作用) 。 有没有人有任何想法?我知道有些人会建议一个柜台,但我对此的了解非常少。 我感谢你,花时间阅读我的问题,并希望你能想到一个解决方案。

1 个答案:

答案 0 :(得分:1)

替换

<xsl:attribute name="x:Name" select="'number_txt_',position()"/>

<强>与

<xsl:attribute name="x:Name" select="concat('number_txt_',position())"/>

此外,整个片段

<xsl:element name="TextBlock">
<xsl:attribute name="x:Name" select="'number_txt_',position()"/>
<xsl:attribute name="Grid.Row" select="position()+2"/>
<xsl:attribute name="Grid.Column" select="0"/>
<xsl:attribute name="Text" select="./@number"/>
<xsl:attribute name="FontSize" select="20"/>
<xsl:attribute name="Foreground" select="'Ivory'"/>
<xsl:attribute name="HorizontalAlignment">
    <xsl:value-of select="'Center'"/>
</xsl:attribute>
<xsl:attribute name="VerticalAlignment">
<xsl:value-of select="'Center'"/>
</xsl:attribute>

可以用更简短易懂的形式重写

<TextBlock x:Name="number_txt_{position()}" Grid.Row="{position()+2}" 
           Grid.Column="0" Text="{@number}" FontSize="20" Foreground="Ivory"
           HorizontalAlignment="Center" VerticalAlignment="Center">