создание xaml с xslt - PullRequest
       22

создание xaml с xslt

1 голос
/ 26 июля 2011

Я пытаюсь создать шаблон xsl для элемента xaml Line.

Вот что у меня есть:

... 

<xsl:call-template name="Line">
  <xsl:with-param name="xOne" select="70"/>
  <xsl:with-param name="xTwo" select="905"/>
  <xsl:with-param name="yOne" select="500"/>
  <xsl:with-param name="yTwo" select="500"/>
</xsl:call-template>

<xsl:template name="Line">
    <xsl:param name="xOne"/>
    <xsl:param name="xTwo"/>
    <xsl:param name="yOne"/>
    <xsl:param name="yTwo"/>
    <Line xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Stroke="red"
      StrokeThickness="2"
      X1="$xOne"
      X2="$xTwo"
      Y1="<xsl:value-of select="number($yOne)"/>" <!-- example: not working -->
      Y2="$yTwo"/>
</xsl:template>

Вопросы:

  • Есть ли лучший способ управлять этими пространствами имен ?
  • Параметры $ xOne, $ xTwo, ... не работают. Насколько я знаю xslt, я должен реализовать их так: <xsl:value-of select="number($xOne)"/>, но это невозможно из-за того, как я пытаюсь их реализовать.

Надеюсь, кто-то с большим опытом работы с xslt и xaml может мне помочь? :)

Я использую xsl v1.0

Ты заранее.

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Есть ли лучший способ управления этими пространствами имен?

Вы можете добавить объявления пространства имен в корневой элемент таблицы стилей:

<xsl:stylesheet version="1.0" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

, а затем используйте префикс, где необходимо, например:

<xsl:template name="Line">
    <!-- ... -->
    <x:Line />
</xsl:template>

, где префикс не используется, будет рассматриваться пространство имен по умолчанию.


Параметры $ xOne, $ xTwo, ... не работают

Узнайте о AVT и используйте:

X1="{$xOne}"
1 голос
/ 26 июля 2011

Вы можете поместить объявление пространства имен в корневой узел, то есть:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>

Таким образом, вы можете просто написать, не добавляя пространства имен:

<Line

Используйте {} для установки атрибутазначения, например:

<xsl:template name="Line">
    <xsl:param name="xOne"/>
    <xsl:param name="xTwo"/>
    <xsl:param name="yOne"/>
    <xsl:param name="yTwo"/>
    <Line
        Stroke="red"
        StrokeThickness="2"
        X1="{$xOne}"
        X2="{$xTwo}"
        Y1="{$yOne}"
    Y2="{$yTwo}"/>
</xsl:template>
...