Sintaxe de marcação do caminho

Os caminhos são discutidos em Formas e desenho básico na Visão geral do WPF e na Visão geral da geometria, no entanto, este tópico descreve em detalhes a minilinguagem poderosa e complexa que você pode usar para especificar geometrias de caminho de forma mais compacta usando XAML (Extensible Application Markup Language).

Pré-requisitos

Para entender este tópico, você deve estar familiarizado com os recursos básicos dos Geometry objetos. Para obter mais informações, consulte Visão geral de geometria.

Mini-linguagens de PathFigureCollection e StreamGeometry

O WPF fornece duas classes que fornecem minilinguagens para descrever caminhos geométricos: StreamGeometry e PathFigureCollection.

  • Use o StreamGeometry miniidioma ao definir uma propriedade do tipo Geometry, como a propriedade de um ou a ClipData propriedade de um UIElementPath elemento. O exemplo a seguir usa a sintaxe de atributo para criar um StreamGeometryarquivo .

    <Path Stroke="Black" Fill="Gray"
          Data="M 10,100 C 10,300 300,-200 300,100" />
    
  • Use o PathFigureCollection mini-idioma ao definir a Figures propriedade de um PathGeometryarquivo . O exemplo a seguir usa uma sintaxe de atributo para criar um para um PathFigureCollectionPathGeometryarquivo .

    <Path Stroke="Black" Fill="Gray">
      <Path.Data>
        <PathGeometry Figures="M 10,100 C 10,300 300,-200 300,100" />
      </Path.Data>
    </Path>
    

Como você pode ver nos exemplos anteriores, as duas mini-linguagens são muito semelhantes. É sempre possível usar um em qualquer situação em que você possa usar um PathGeometryStreamGeometry, então qual você deve usar? Use um quando você não precisa modificar o caminho depois de criá-lo, use um StreamGeometryPathGeometry se você precisar modificar o caminho.

Para obter mais informações sobre as diferenças entre PathGeometry e StreamGeometry objetos, consulte a Visão geral da geometria.

Uma observação sobre o espaço em branco

Para resumir, um único espaço é mostrado na seção de sintaxe que segue, mas vários espaços também são aceitos sempre que um único espaço é mostrado.

Dois números não precisam ser separados por uma vírgula ou espaço em branco, mas isso só pode ser feito quando a cadeia de caracteres resultante é inequívoca. Por exemplo, 2..3 na verdade são dois números: "2". E ".3". Da mesma forma, 2-3 é "2" e "-3". Espaços não são necessários antes ou depois de comandos.

Sintaxe

A sintaxe de uso do atributo XAML (Extensible Application Markup Language) para um é composta por um StreamGeometry valor opcional FillRule e uma ou mais descrições de figura.

Uso do atributo StreamGeometry XAML
<propriedade=" do objeto[ ] [ figureDescriptionfillRule]* figureDescription" ... />

A sintaxe de uso do atributo XAML (Extensible Application Markup Language) para um PathFigureCollection é composta de uma ou mais descrições de figuras.

Uso do atributo PathFigureCollection XAML
<propriedadefigureDescription=" do objeto[ figureDescription]*" ... />
Termo Descrição
fillRule System.Windows.Media.FillRule

Especifica se o usa o StreamGeometryEvenOdd ou NonzeroFillRule.

- F0 Especifica a EvenOdd regra de preenchimento.
- F1 Especifica a Nonzero regra de preenchimento.

Se você omitir esse comando, o subcaminho usará o comportamento padrão, que é EvenOdd. Se você especificar este comando, coloque-o primeiro.
figureDescription Uma figura é composta de um comando mover, desenhar e um comando opcional para fechar.

moveCommand drawCommands [ closeCommand ]
moveCommand Um comando de mover que especifica o ponto inicial da figura. Consulte a seção Mover comando .
drawCommands Um ou mais comandos de desenho que descrevem o conteúdo da figura. Consulte a seção Desenhar comandos .
closeCommand Um comando Fechar opcional que fecha a figura. Consulte a seção Fechar comando .

Comando Mover

Especifica o ponto de início de uma nova figura.

Sintaxe
MstartPoint

- ou -

mstartPoint
Termo Descrição
startPoint System.Windows.Point

O ponto inicial da nova figura.

Uma maiúscula indica que é um valor absoluto, uma minúscula Mm indica que startPointstartPoint é um deslocamento para o ponto anterior, ou (0,0) se nenhum existir. Se você listar vários pontos após o comando Mover, uma linha será desenhada nestes pontos nos quais você especificou a linha de comando.

Comandos Desenhar

Um comando de desenho pode consistir em vários comandos de formas. Os comandos de forma a seguir estão disponíveis: linha, linha horizontal, linha vertical, curva de Bézier cúbica, curva de Bezier quadrática, curva de Bézier cúbica suave, curva de Bezier quadrática suave e arco elíptico.

Insira cada comando usando uma letra maiúscula ou uma letra minúscula: letras maiúsculas denotam valores absolutos e letras minúsculas denotam valores relativos: os pontos de controle para aquele segmento são relativos ao ponto final do exemplo anterior. Ao inserir sequencialmente mais de um comando do mesmo tipo, você pode omitir a entrada de comando duplicado; por exemplo, L 100,200 300,400 é equivalente a L 100,200 L 300,400. A tabela a seguir descreve os comandos mover e desenhar.

Comando de Linha

Cria uma linha reta entre o ponto atual e o ponto final especificado. l 20 30e L 20,30 são exemplos de comandos de linha válidos.

Sintaxe
LendPoint

- ou -

lendPoint
Termo Descrição
endPoint System.Windows.Point

O ponto de extremidade da linha.

Uma maiúscula indica que é um valor absoluto, uma minúscula Ll indica que endPointendPoint é um deslocamento para o ponto anterior, ou (0,0) se nenhum existir.

Comando de linha horizontal

Cria uma linha horizontal entre o ponto atual e a coordenada X especificada. H 90 é um exemplo de um comando de linha horizontal válido.

Sintaxe
Hx

- ou -

hx
Termo Descrição
x System.Double

A coordenada X do ponto final da linha.

Uma maiúscula indica que é um valor absoluto, uma minúscula Hh indica que xx é um deslocamento para o ponto anterior, ou (0,0) se nenhum existir.

Comando de linha vertical

Cria uma linha vertical entre o ponto atual e a coordenada y especificada. v 90 é um exemplo de um comando de linha vertical válido.

Sintaxe
Vy

- ou -

vy
Termo Descrição
y System.Double

A coordenada y do ponto final da linha.

Uma maiúscula indica que é um valor absoluto, uma minúscula Vv indica que yy é um deslocamento para o ponto anterior, ou (0,0) se nenhum existir.

Comando de curva de Bézier cúbica

Cria uma curva de Bezier cúbica entre o ponto atual e o ponto final especificado usando os dois pontos de controle especificados (controlPoint1 e controlPoint2). C 100,200 200,400 300,200 é um exemplo de um comando de curva válido.

Sintaxe
CcontrolPoint1controlPoint2endPoint

- ou -

ccontrolPoint1controlPoint2endPoint
Termo Descrição
controlPoint1 System.Windows.Point

O primeiro ponto de controle da curva, que determina o início da tangente da curva.
controlPoint2 System.Windows.Point

O segundo ponto de controle da curva, que determina o final da tangente da curva.
endPoint System.Windows.Point

O ponto em que a curva é desenhada.

Comando de curva de Bezier quadrática

Cria uma curva de Bezier quadrática entre o ponto atual e o ponto final especificado usando o ponto de controle especificado (controlPoint). q 100,200 300,200 é um exemplo de um comando de curva de Bezier quadrática válido.

Sintaxe
Q controlPoint endPoint

- ou -

q controlPoint endPoint
Termo Descrição
controlPoint System.Windows.Point

O ponto de controle da curva, que determina o início e final da tangente da curva.
endPoint System.Windows.Point

O ponto em que a curva é desenhada.

Comando de Curva de Bézier cúbica suave

Cria uma curva de Bézier cúbica entre o ponto atual e o ponto final especificado. O primeiro ponto de controle é assumido ser a reflexão do segundo ponto de controle do comando anterior relativo ao ponto atual. Se não houver nenhum comando anterior ou se o comando anterior não era um comando de curva de Bézier cúbico ou um comando de curva de Bézier cúbico suave, suponha que o primeiro ponto de controle é coincidente com o ponto atual. O segundo ponto de controle, o ponto de controle para o final da curva, é especificado por controlPoint2. Por exemplo, S 100,200 200,300 é um comando válido de curva cúbica de Bezier suave.

Sintaxe
ScontrolPoint2endPoint

- ou -

scontrolPoint2endPoint
Termo Descrição
controlPoint2 System.Windows.Point

O ponto de controle da curva, que determina o final da tangente da curva.
endPoint System.Windows.Point

O ponto em que a curva é desenhada.

Curva de Bezier quadrática suave comando

Cria uma curva de Bezier quadrática entre o ponto atual e o ponto final especificado. O ponto de controle é assumido ser a reflexão do ponto de controle do comando anterior relativo ao ponto atual. Se não houver nenhum comando anterior ou se o comando anterior não era um comando de curva de Bezier quadrática ou um comando de curva de Bezier quadrático suave, o ponto de controle será coincidente com o ponto atual.

Sintaxe
T endPoint

- ou -

t endPoint
Termo Descrição
endPoint System.Windows.Point

O ponto em que a curva é desenhada.

Comando de arco elíptico

Cria um arco elíptico entre o ponto atual e o ponto final especificado.

Sintaxe
A size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint

- ou -

a size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint
Termo Descrição
size System.Windows.Size

Os raios x e y do arco.
rotationAngle System.Double

A rotação da elipse, em graus.
isLargeArcFlag Definido como 1 se o ângulo do arco deva ser 180 graus ou maior. Caso contrário, defina como 0.
sweepDirectionFlag Definido como 1 se o arco é desenhado na direção ângulo-positiva. Caso contrário, defina como 0.
endPoint System.Windows.Point

O ponto em que o arco é desenhado.

O comando Fechar

Termina a figura atual e cria uma linha que conecta o ponto atual ao ponto de partida da figura. Este comando cria uma linha-junção (canto) entre o último segmento e o primeiro segmento da figura.

Sintaxe
Z

- ou -

z

Sintaxe de ponto

Descreve as coordenadas x e y de um ponto onde (0,0) é o canto superior esquerdo.

Sintaxe
x , y

- ou -

x y
Termo Descrição
x System.Double

A coordenada X do ponto.
y System.Double

A coordenada Y do ponto.

Valores especiais

Em vez de um valor numérico padrão, você também pode usar os seguintes valores especiais. Esses valores diferenciam maiúsculas de minúsculas.

Infinity
Representa Double.PositiveInfinity.

-Infinito
Representa Double.NegativeInfinity.

NaN
Representa Double.NaN.

Você também pode usar notação científica. Por exemplo, +1.e17 é um valor válido.

Confira também