使用多种颜色创建复杂的几何体/路径[Silverlight]

时间:2015-04-29 12:07:36

标签: c# xml xaml silverlight geometry

目前我创建并显示了这个图形(黄色是图,黑色是背景):

enter image description here

有关该图的信息以XML格式存储,并在启动时加载到系统中。

 <Part Name="Test" Description="Test description" Geometry="M 0,0 L 20,0 L 20,20 L 0,20 Z M 0,40 L 20,40 L 20,60 L 0,60 Z M 80,0 L 100,0 L100,20 L 80,20 Z M 80,40 L 100,40 L 100,60 L 80,60 Z M 20,0 L 80,0 L 80,60 L 20,60 Z" Color="Yellow" Height="60" Width="100"/>

然后,该信息用于填充具有以下内容的类:

尺寸,几何和颜色属性以及其他不太相关的数据,如名称,描述等。

我使用带路径的Canvas在XAML视图中显示它:

<Canvas Grid.Row="1" Width="75" Height="75" HorizontalAlignment="Left" VerticalAlignment="Center" ToolTipService.ToolTip="{Binding Description}">
    <Path HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Data="{Binding Geometry}" Stroke="{Binding StrokeColor}" StrokeThickness="1" Fill="{Binding Color}" Width="{Binding Size.Width}" Height="{Binding Size.Height}"/>
</Canvas>

一切正常。但是要求已经出现,以便形状的四个向外的块必须具有不同的颜色。

enter image description here

由于这是一个Path,它只能有一个Color。同时,就我所知,没有颜色可用于几何。

所以我需要将原始几何体分成多个小几何体。然后从中创建多个路径,并以某种方式将它们组合在一起,以便能够正确显示它。

可能是这样的XML结构:

<Part Name="Test" etc>
    <Geometries>
        <GeometryPart Geometry="M 0,0 L 20,0 L 20,20 L 0,20" Color="White">
        <GeometryPart Geometry="M 0,40 L 20,40 L 20,60 L 0,60" Color="White">
        <GeometryPart Geometry="M 0,40 L 20,40 L 20,60 L 0,60" Color="White">
        <GeometryPart Geometry="M 0,40 L 20,40 L 20,60 L 0,60" Color="White">
        <GeometryPart Geometry="M 0,40 L 20,40 L 20,60 L 0,60" Color="Yellow">
     </Geometries>
</Part

我一直在使用这个想法作为尝试直接在XAML视图/代码后面创建内容的基础,以创建示例图并显示它。但经过一段时间后,我仍然没有找到任何好的解决方案。

有人对我有任何建议/指示吗?

祝你好运 托马斯

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是只使用LinearGradientBrushPath的中心显示黄色。使用Rectangle

来举个简单示例
<Rectangle Width="500" Height="250" Stroke="Black" StrokeThickness="1">
    <Rectangle.Fill>
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
            <GradientStop Color="Transparent" Offset="0" />
            <GradientStop Color="Transparent" Offset="0.25" />
            <GradientStop Color="Yellow" Offset="0.25001" />
            <GradientStop Color="Yellow" Offset="0.74999" />
            <GradientStop Color="Transparent" Offset="0.75" />
            <GradientStop Color="Transparent" Offset="1" />
        </LinearGradientBrush>
    </Rectangle.Fill>
</Rectangle>

这就是它的样子:

enter image description here