Partilhar via


Sintaxe de marcação de caminho

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

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 o Geometry Overview.

StreamGeometry e PathFigureCollection Mini-Languages

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

  • Você usa o mini-idioma StreamGeometry ao definir uma propriedade do tipo Geometry, como a propriedade Clip de um UIElement ou a propriedade Data de um elemento Path. O exemplo a seguir usa sintaxe de atributo para criar um StreamGeometry.

    <Path Stroke="Black" Fill="Gray"
          Data="M 10,100 C 10,300 300,-200 300,100" />
    
  • Você usa a PathFigureCollection mini-linguagem ao definir a Figures propriedade de um PathGeometry. O exemplo a seguir usa uma sintaxe de atributo para criar um PathFigureCollection foro PathGeometry.

    <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-línguas são muito semelhantes. É sempre possível usar um PathGeometry em qualquer situação em que você possa usar um StreamGeometry, então qual deles você deve usar? Use um StreamGeometry quando você não precisa modificar o caminho depois de criá-lo, use um PathGeometry 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 de geometria.

Uma nota sobre o espaço em branco

Por uma questão de brevidade, um único espaço é mostrado nas seções de sintaxe a seguir, mas vários espaços também são aceitáveis sempre que um único espaço é mostrado.

Na verdade, 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 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". Os espaços também não são necessários antes ou depois dos comandos.

Sintaxe

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

Uso do atributo XAML StreamGeometry
< Propriedade="[ fillRule] figureDescription[ figureDescription]*" ... />

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

Utilização do atributo PathFigureCollection XAML
< Propriedade="figureDescription[ figureDescription]*" ... />
Período Descrição
fillRule System.Windows.Media.FillRule

Especifica se o StreamGeometry usa o EvenOdd ou NonzeroFillRule.

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

Se você omitir esse comando, o subcaminho usará o comportamento padrão, que é EvenOdd. Se você especificar esse comando, deverá colocá-lo primeiro.
Descrição da figura Uma figura composta por um comando de movimento, comandos de desenho e um comando de encerramento opcional.

moveCommand drawCommands [ closeCommand ]
moveCommand Um comando move que especifica o ponto inicial da figura. Consulte a seção Comando Mover.
drawComandos Um ou mais comandos de desenho que descrevem o conteúdo da figura. Consulte a seção Comandos de Desenho.
fecharComando Um comando opcional de fecho que fecha a figura. Consulte a seção Fechar comando .

Comando Mover

Especifica o ponto inicial de uma nova figura.

Sintaxe
M ponto de partida

- ou -

m ponto de partida
Período Descrição
ponto de partida System.Windows.Point

O ponto de partida de uma nova figura.

Uma letra maiúscula M indica que startPoint é um valor absoluto, uma minúscula m indica que startPoint é um deslocamento para o ponto anterior, ou (0,0) se não existir. Se você listar vários pontos após o comando move, uma linha será desenhada para esses pontos, embora você tenha especificado o comando line.

Comandos de Desenho

Um comando draw pode consistir em vários comandos de forma. Os seguintes comandos de forma estão disponíveis: linha, linha horizontal, linha vertical, curva cúbica de Bezier, curva quadrática de Bezier, curva de Bezier cúbica lisa, curva de Bezier quadrática suave e arco elíptico.

Você insere cada comando usando uma letra maiúscula ou minúscula: letras maiúsculas denotam valores absolutos e letras minúsculas denotam valores relativos: os pontos de controle para esse segmento são relativos ao ponto final do exemplo anterior.

Sugestão

Ao inserir sequencialmente mais de um comando do mesmo tipo, você pode omitir a entrada de comando duplicada; por exemplo, L 100,200 300,400 é equivalente a L 100,200 L 300,400.

Comando de linha

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

Sintaxe
L ponto final

- ou -

l ponto final
Período Descrição
endpoint System.Windows.Point

O ponto final da linha.

Uma letra maiúscula L indica que endPoint é um valor absoluto, uma minúscula l indica que endPoint é um deslocamento para o ponto anterior, ou (0,0) se não 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
H x

- ou -

h x
Período Descrição
x System.Double

A coordenada x do ponto final da linha.

Uma letra maiúscula H indica que x é um valor absoluto, uma minúscula h indica que x é um deslocamento para o ponto anterior, ou (0,0) se não 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
V y

- ou -

v y
Período Descrição
y System.Double

A coordenada y do ponto final da linha.

Uma letra maiúscula V indica que y é um valor absoluto, uma minúscula v indica que y é um deslocamento para o ponto anterior, ou (0,0) se não existir.

Comando Curva Cúbica de Bezier

Cria uma curva cúbica de Bezier 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
C controlPoint controlPoint1 2endPoint

- ou -

c controlPoint controlPoint1 2endPoint
Período Descrição
controlPoint1 System.Windows.Point

O primeiro ponto de controle da curva, que determina a tangente inicial da curva.
controlPoint2 System.Windows.Point

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

O ponto para o qual a curva é desenhada.

Comando de Curva Quadrática de Bézier

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ático válido.

Sintaxe
Q controlPoint endPoint

- ou -

q controlPoint endPoint
Período Descrição
controlPoint System.Windows.Point

O ponto de controle da curva, que determina as tangentes iniciais e finais da curva.
endPoint System.Windows.Point

O ponto para o qual a curva é desenhada.

Comando de curva de Bezier cúbica suave

Cria uma curva cúbica de Bezier entre o ponto atual e o ponto final especificado. Assume-se que o primeiro ponto de controlo é o reflexo do segundo ponto de controlo do comando anterior em relação ao ponto atual. Se não houver nenhum comando anterior ou se o comando anterior não foi um comando de curva cúbica de Bezier ou um comando de curva de Bezier cúbica suave, suponha que o primeiro ponto de controle seja coincidente com o ponto atual. O segundo ponto de controlo, o ponto de controlo para o fim da curva, é especificado por controlPoint2. Por exemplo, S 100,200 200,300 é um comando válido de curva cúbica Bezier suave.

Sintaxe
S controlPoint2endPoint

- ou -

s controlPoint2endPoint
Período Descrição
controlPoint2 System.Windows.Point

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

O ponto para o qual a curva é desenhada.

Comando de curva Bézier quadrática suave

Cria uma curva de Bezier quadrática entre o ponto atual e o ponto final especificado. Assume-se que o ponto de controlo é o reflexo do ponto de controlo do comando anterior em relação ao ponto atual. Se não houver nenhum comando anterior ou se o comando anterior não foi um comando de curva de Bezier quadrático ou um comando de curva de Bezier quadrática suave, o ponto de controle é coincidente com o ponto atual.

Sintaxe
T endPoint

- ou -

t endPoint
Período Descrição
endPoint System.Windows.Point

O ponto para o qual 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
Período Descrição
size System.Windows.Size

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

A rotação da elipse, em graus.
isLargeArcFlag Defina para 1 se o ângulo do arco deve ser de 180 graus ou maior; caso contrário, defina como 0.
sweepDirectionFlag Regule para 1 se o arco for desenhado numa direção de ângulo positivo; caso contrário, defina como 0.
endPoint System.Windows.Point

O ponto até onde o arco é traçado.

O comando Fechar

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

Sintaxe
Z

- ou -

z

Sintaxe do ponto

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

Sintaxe
x , y

- ou -

x y
Período 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 são sensíveis à diferença entre maiúsculas e minúsculas.

O infinito representa Double.PositiveInfinity.

-O 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.

Ver também