WPF: Como colocar um objeto/forma no final de um caminho de linha/traço?
Pergunta
Eu só quero perguntar se há uma maneira de colocar um objeto (círculo) no final de um caminho de linha específico.
Semelhante a isso:
--------------------------------------------O
Start End
No momento, tenho o seguinte código para traçar a linha:
<Grid x:Name="LayoutRoot" >
<Path Stroke="Red" StrokeThickness="4" x:Name="path4" Data="{Binding MyProperty1}" >
<Path.StrokeDashArray>
<System:Double>500</System:Double>
<System:Double>1000</System:Double>
</Path.StrokeDashArray>
</Path>
</Grid>
onde os dados do meu caminho (por exemplo, M532.668 L523.695 361.663 101.678 117.638) varia.
Minha animação se parece com isso ...
<Storyboard x:Key="Story1" RepeatBehavior="Forever">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetName="path1"
Storyboard.TargetProperty="(Shape.StrokeDashOffset)">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="500"/>
<SplineDoubleKeyFrame KeyTime="00:00:08" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
Alguma sugestão?
Solução
Existem pelo menos algumas maneiras de fazer isso; O que é melhor provavelmente depende do relacionamento do círculo com a linha.
Se o círculo fizer parte conceitualmente da mesma forma que a linha, altere seu caminho para incluir uma elipse (arco) no final da linha. Isso pode ser feito alterando os dados do caminho, adicionando um círculo ao final ou adicionando outra figura à PathGeometria.
Se o círculo for conceitualmente um componente separado, e você só quiser colocar esse componente ao lado da linha, basta usar um Stackpanel com sua orientação definida como horizontal:
<StackPanel Orientation="Horizontal">
<Path /> <!-- The line -->
<Ellipse /> <!-- The circle -->
</StackPanel>
(Nota: em alguns cenários, você pode fazer isso usando a propriedade EndLinecap. Isso não funcionará neste caso, porque parece que você deseja que o círculo seja maior que a espessura do golpe. As tampas da linha são sempre a mesma espessura que a linha.)