Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF沿路径绘制箭头_C#_.net_Wpf_Path_Drawing - Fatal编程技术网

C# WPF沿路径绘制箭头

C# WPF沿路径绘制箭头,c#,.net,wpf,path,drawing,C#,.net,Wpf,Path,Drawing,只是想知道我该如何沿着一条路径画箭头。路径将改变方向并通过几个不同的点。箭头设计用于向用户显示他们需要沿路径行进的方向 我试过用刷子,但没用,因为我需要箭头沿着路径定位自己 参见和 它可用于沿路径几何体移动控件,如果设置DoesRotateWithTangent,控件也将沿路径方向旋转 EDIT1: <Page.Resources> <PathGeometry x:Key="Path" x:Shared="False" Figures="M 10,100 C 35,0

只是想知道我该如何沿着一条路径画箭头。路径将改变方向并通过几个不同的点。箭头设计用于向用户显示他们需要沿路径行进的方向

我试过用刷子,但没用,因为我需要箭头沿着路径定位自己

参见和

它可用于沿路径几何体移动控件,如果设置DoesRotateWithTangent,控件也将沿路径方向旋转

EDIT1:

<Page.Resources>
    <PathGeometry x:Key="Path" x:Shared="False" Figures="M 10,100 C 35,0 135,0 160,100 180,190 285,200 310,100"/>
</Page.Resources>
<Canvas Width="400" Height="400">
    <Path Data="{StaticResource Path}" Stroke="Blue" StrokeThickness="1"/>
    <Path
        x:Name="Arrow1"
        Stretch="Fill"
        Width="16" Height="16" StrokeLineJoin="Miter"
        Data="M 0 -5 L 10 -5 M 5 0 L 10 -5 L 5 -10" 
        Stroke="Black" StrokeThickness="3">
        <Path.RenderTransform>
            <TransformGroup>
                <TranslateTransform X="-8" Y="-8"/>
                <MatrixTransform>
                    <MatrixTransform.Matrix>
                        <Matrix/>
                    </MatrixTransform.Matrix>
                </MatrixTransform>
            </TransformGroup>
        </Path.RenderTransform>
        <Path.Triggers>
            <EventTrigger RoutedEvent="Path.Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <MatrixAnimationUsingPath
                            Storyboard.TargetName="Arrow1"
                            Storyboard.TargetProperty="RenderTransform.Children[1].Matrix"                                
                            DoesRotateWithTangent="True"
                            Duration="0:0:5" 
                            BeginTime="0:0:0"
                            RepeatBehavior="Forever" PathGeometry="{StaticResource Path}" >                               
                        </MatrixAnimationUsingPath>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Path.Triggers>
    </Path>
</Canvas>

EDIT2:计算需要多少箭头

我假设您正在创建一个自定义控件,并以编程方式添加箭头? 如果是这样的话,我认为最简单的方法是为单个循环和一个BeginTimeGap指定一个持续时间,即后续箭头的起始时间之间的时间。必须添加的箭头数为Duration/BeginTimeGap,或简化代码:

while (BeginTime < Duration) 
{ 
    //add arrow with BeginTime and Duration; 
    BeginTime += BeginTimeGap; 
}
while(开始时间<持续时间)
{ 
//添加带有起始时间和持续时间的箭头;
BeginTime+=BeginTimeGap;
}

要获得正确的速度和箭头之间的间距,需要调整这两个值。

我已经看过了,但我不认为这与我所追求的是一致的。你确定吗?尝试运行我添加的xaml…如果这不是您想要的,可以尝试在您的问题中澄清吗?好的,我很感兴趣;)好的,这将如何修改,使一个箭头沿线移动,间距为40px。。。因此,它就像一个连续的箭头流?如果你有一个静态路径不会改变,那么简单的解决方案是添加多个箭头,但在每个动画上设置不同的起始时间。如果路径是可变的,则必须创建一个自定义控件,该控件接受PathGeometry,并在基于PathGeometry的代码中以编程方式创建箭头(如箭头1)。在代码中,您还可以计算箭头开始时间之间的理想间距。我可以计算出需要多少箭头。。。否则,我可以看到自己只是在一个循环中,创造了无数的箭头。。。