1

XSL を使用して XAML ファイルを作成しようとしていますが、必要なものの 1 つは、100 個のテキストブロックの一意の名前です。for-each ループで Textblock を作成し (これは機能し、すべての要素が作成されます)、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"/>

すべての TextBlock についても同様です。「number_txt_」と数字の間の空白に注意してください。

このファイルを C# Silverlight プロジェクトで使用したいのですが、ax:Name で空白を使用したり、1 桁の数字を使用したりすることはできません (カウンターのみで試しましたが、機能しません)。誰にもアイデアはありますか?カウンターを提案する人がいることは知っていますが、それに関する私の知識は非常に少ないです. 私の問題を読んでくれてありがとう、そして解決策を考えてくれることを願っています。

4

1 に答える 1

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">
于 2013-05-19T15:57:06.533 に答える