Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
如何在WPF中的路径对象中设置不同的笔划属性_Wpf_Geometry_Shapes - Fatal编程技术网

如何在WPF中的路径对象中设置不同的笔划属性

如何在WPF中的路径对象中设置不同的笔划属性,wpf,geometry,shapes,Wpf,Geometry,Shapes,我有一个路径形状,我想结合线有不同的线厚度? StrokeThickness属性是在Path对象上设置的,因此我无法为不同的行更改它。如果我想改变我的线条颜色,同样的问题也会出现 我想这样做的原因是我可以画一个箭头。查尔斯·佩佐尔德箭头http://www.charlespetzold.com/blog/2007/04/191200.html 不要为我工作。如果我的线是虚线,闭合的箭头画得很奇怪 我想一个方法是在我的路径/线的末端合并一个新的短线几何体,它比我原来的路径/线更厚,有三角形线帽,瞧

我有一个路径形状,我想结合线有不同的线厚度? StrokeThickness属性是在Path对象上设置的,因此我无法为不同的行更改它。如果我想改变我的线条颜色,同样的问题也会出现

我想这样做的原因是我可以画一个箭头。查尔斯·佩佐尔德箭头http://www.charlespetzold.com/blog/2007/04/191200.html 不要为我工作。如果我的线是虚线,闭合的箭头画得很奇怪

我想一个方法是在我的路径/线的末端合并一个新的短线几何体,它比我原来的路径/线更厚,有三角形线帽,瞧,给我自己一个箭头。但我不能组合具有不同线条厚度和虚线类型等的几何体


有什么想法吗

只需在画布或网格等面板中使用多个
Path
对象即可,在这些对象之间相互重叠:

<Grid>
    <Path Stroke="Blue" StrokeThickness="2">
        <Path.Data>
            <EllipseGeometry Center="20 20" RadiusX="10" RadiusY="10" />
        </Path.Data>
    </Path>
    <Path Stroke="Green" StrokeThickness="1" StrokeDashArray="1 2">
        <Path.Data>
            <LineGeometry StartPoint="10 20" EndPoint="30 20"/>
        </Path.Data>
    </Path>
</Grid>


我不是在使用XAMAL,而是以编程方式完成这项工作。我正在构建一个图表显示应用程序(类似Visio),我的所有形状都是添加到一个主画布中的WPF形状。我有点希望不要混合添加形状和迷你画布。@zfeld:
Shape.OnRender
DrawingContext.DrawGeometry
进行一次调用,因此它只能使用一支画笔和画笔。您可以将每个图包装在一个迷你画布中,即使它只是一个WPF形状,这样至少不会有混合。重写OnRender()方法如何?这是一种选择吗?如何创建一个由2个形状对象组成的自定义形状对象,然后在重写的OnRender()方法中,让DrawingContext绘制这2个形状的几何图形,并在绘图之间切换画笔?这种方法有意义吗?@zfeld:您当然可以实现一个自定义UIElement,在OnRender中绘制两个几何体。您可能还需要覆盖MeasureOverride和ArrangeOverride以获得正确的布局。我仍然建议使用一个包含两个Shape子项的面板,并让框架解决所有问题,但如果这在应用程序中不起作用,那么重写OnRender是一个好方法。