2

我有两个 Canvas,其中包含 Path 类型。这些元素放置在地图中,其中我有一个顶部坐标和左侧坐标。这些元素的边框颜色不同。在它们的边界处它们重叠,因此只显示了一个有颜色的元素边界。有没有办法调整我的 xaml 代码,以便显示两个边框,而不更改顶部和左侧坐标,因为当我将这些元素放入我的地图时,我会从 ViewModel 中的列表中获取它们。两个重叠国家的一个例子是:

重叠国家的例子

因此,正如您在图片中看到的那样,您只能看到苏格兰和爱尔兰的边界,但看不到英格兰。我为每个国家/地区使用的 xaml 代码是

    Canvas.Left="{Binding CountryView.X}" Canvas.Top="{Binding CountryView.Y}" Canvas.ZIndex="{Binding CountryView.Z}">     

<Canvas>
        <Path x:Name="CountryUser" Stretch="Fill" StrokeThickness="{StaticResource StrokeUserControl}" StrokeLineJoin="Round" Fill="{StaticResource CountryBackground}" Stroke="{Binding CountryView.CountryColor}" Data="{Binding CountryView.MapData}"/>
    </Canvas>

CountryView 是我的国家列表。我对 DashArray 进行了一些研究,是否可以在国家共享边界的地方应用破折号,这样在边界处您可以更改每种颜色的破折号,但该国其他地区与国家一致颜色?

4

1 回答 1

2

如果您有与我相同的经历,您将遇到很多这些小问题,因为它们可能会成为*的一大痛苦,但是....幸运的是,您几乎总有一种解决方法或技巧可以做你会在路上捡到的。对于您当前的问题,您有一些选项可以帮助您的用户。这里只是其中的几个;

ScaleTransform或者MarginPath将轮廓用于 1 像素或更多像素,以便为您的边框留出一点空间,以便彼此相邻显示,而不必重叠。

在您的路径Opacity之间使用,无论是Opacity直接将 设置为Path还是使用作为笔划提供的颜色的 Alpha 通道,例如#59ff0000允许在重叠边框上至少有颜色对比。例如,假设您有 2 个路径,一个蓝色,一个黄色,然后它们重叠的地方将显示绿色。

正如您所指出的那样,通过使用空间/宽度来错开边界来创建对比度,StrokeDashArray因此即使它们确实重叠,它们仍然不会彼此重叠,这也是一个StrokeDashOffset可以派上用场的地方。

如果您允许您的用户与这些形状进行交互,我还可以向您展示如何将 aVisualStateManager应用于路径并Stroke在选择它们时为破折号设置动画等,以使用户更容易看到他们选择的区域.

无论如何,希望这会有所帮助。如果你想要具体的例子,请告诉我。干杯。

更新: 您可以像这样使用 ScaleTransform;

<Canvas>
   <Path x:Name="CountryUser" Stretch="Fill" StrokeThickness="{StaticResource StrokeUserControl}" StrokeLineJoin="Round" Fill="{StaticResource CountryBackground}" Stroke="{Binding CountryView.CountryColor}" Data="{Binding CountryView.MapData}">
     <Path.RenderTransform>
        <CompositeTransform ScaleX="0.95" ScaleY="0.95"/>
     </Path.RenderTransform>
   </Path>
</Canvas>

您可以调整 X/Y 比例因子以满足您的需要,但 0.95 本身可能会提供不错的结果。

于 2013-10-25T21:05:44.970 回答