WPF路径数据创建漏洞

时间:2016-05-16 19:14:06

标签: c# wpf xaml

我正在尝试创建一个X符号。我绘制了两条重叠的粗线,但是WPF删除了符号的交叉点 - 我想要一个坚实的" X符号"

enter image description here

list

2 个答案:

答案 0 :(得分:3)

您需要使用FillRulePath Mini-Language页面还会显示使用方法。

  

FillRule

     

指定路径是使用EvenOdd还是NonZero填充规则值:
   F0 指定EvenOdd填充规则    F1 指定非零填充规则。

     

如果省略此命令,则路径使用默认行为,即EvenOdd。如果指定此命令,则必须将其放在首位

<Path x:Name="CheckIcon"  
    Width="{TemplateBinding Width, Converter={StaticResource mathConverter}, ConverterParameter=*2/3-20}" 
    Height="{TemplateBinding Height, Converter={StaticResource mathConverter}, ConverterParameter=*2/3-20}"  
    Margin="1,1,0,1.5" 
    Opacity="1" 
    Stretch="Fill" 
    Fill="Silver"
    Data="M 0,.2 L .2,0 L .5,.3 L .8,0 L 1,.2 L .7,.5 L 1,.8 L .8,1 L .5,.7 L .2,1 L 0,.8 L .3,.5 Z"
/>




另一种乏味的方式......

还有另一种更繁琐的方法,那就是使整个十字架成为一个多边形。这意味着您需要对交叉区域的点进行数学计算。幸运的是,对我来说,不幸的是,我做了所有的数学,所以在这里。 (P.S.我不敢相信我做了所有那些罪/ cos的事情大声笑!)

{{1}}

我没试过。如果有效,请告诉我。

答案 1 :(得分:1)

FillRule不允许填充来自两个几何的重叠区域的情况下,可以一次使用CombinedGeometry来一次描述Path.Data属性:

<Path Width="100" Height="100" Stretch="Uniform" Fill="Silver">
    <Path.Data>
        <CombinedGeometry>
            <CombinedGeometry.Geometry1>
                <PathGeometry>
                    <!-- First part of the cross -->
                    <PathFigure>
                        <PolyLineSegment Points=".2,0 1,.8 .8,1 0,.2 .2,0"/>
                    </PathFigure>
                </PathGeometry>
            </CombinedGeometry.Geometry1>
            <CombinedGeometry.Geometry2>
                <PathGeometry>
                    <!-- Second part of the cross -->
                    <PathFigure>
                        <PolyLineSegment Points=".8,0 0,.8 .2,1 1,.2 .8,0"/>
                    </PathFigure>
                </PathGeometry>
            </CombinedGeometry.Geometry2>
        </CombinedGeometry>
    </Path.Data>
</Path>    

默认情况下,通过执行并集将两个几何合并在一起,但是如果需要其他操作,可以指定GeometryCombineMode 。 结果:

enter image description here

但是在有疑问的情况下,图形是特殊的(两行交叉),可以通过使用stroke属性而不是fill属性来获得,这也简化了点集本身:

<Path Width="107.1" Height="107.1" Stretch="Uniform" Stroke="Silver" StrokeThickness="28.3">
    <Path.Data>
        <GeometryGroup>
            <LineGeometry StartPoint=".1,.1" EndPoint=".9,.9"/>
            <LineGeometry StartPoint=".9,.1" EndPoint=".1,.9"/>
        </GeometryGroup>
    </Path.Data>
</Path>

结果是相同的,这可以通过使用迷你语言进一步简化:

<Path Width="107.1" Height="107.1" Stretch="Uniform" Stroke="Silver" StrokeThickness="28.3"
      Data="M .1,.1 L .9,.9 M .9,.1 L .1,.9"/>

宽度,高度和笔触粗细的值已进行了调整(使用毕达哥拉斯),因为当使用线而不是问题矩形时,这些线使用矩形边的中间点。