我正在尝试创建一个 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)
为此,您需要使用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)
不过我没有尝试。让我知道它是否有效。