WPF 路径数据创建孔

ast*_*ght 2 c# wpf xaml

我正在尝试创建一个 X 符号。我画了两条重叠的粗线,但 WPF 删除了符号的交集 - 我想要一个实心的“X 符号”

在此处输入图片说明

 <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,0 L.2,0 L 1,.8 L .8,1 L 0,.2 L .2, 0 M 1,0 L .8,0 L 0,.8 L .2,1 L 1,.2 L .8, 0"
    />
Run Code Online (Sandbox Code Playgroud)

Jai*_*Jai 5

为此,您需要使用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="F1 M 0,0 L.2,0 L 1,.8 L .8,1 L 0,.2 L .2, 0 M 1,0 L .8,0 L 0,.8 L .2,1 L 1,.2 L .8, 0"
/>
Run Code Online (Sandbox Code Playgroud)




另一种乏味的方式...

还有一种更繁琐的方法,就是把整个十字变成一个多边形。这意味着您需要对交点区域的点进行数学运算。对你来说幸运,对我来说不幸的是,我做了所有的数学运算,所以就在这里。(PS 我简直不敢相信我做了所有这些罪 / cos 的事情,哈哈!)

<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"
/>
Run Code Online (Sandbox Code Playgroud)

不过我没有尝试。让我知道它是否有效。