Wpf 显示两个重叠边框xaml WP8

Wpf 显示两个重叠边框xaml WP8,wpf,xaml,windows-phone-8,windows-phone,border,Wpf,Xaml,Windows Phone 8,Windows Phone,Border,我有两个画布,其中有类型路径。这些元素被放置在一个地图中,我有一个顶部坐标和一个左侧坐标。这些元素的边框颜色不同。它们在边界处重叠,因此只显示一个元素边界颜色。有没有一种方法可以调整我的xaml代码,以便在不改变顶部和左侧坐标的情况下显示两个边框,因为当我将这些元素放入地图时,我是从ViewModel中的列表中获取它们的。两个重叠国家的一个例子是: 因此,正如你在图片中看到的,你只能看到苏格兰和爱尔兰的边界,但也不能看到英格兰。我为每个国家使用的xaml代码是 Canvas.Left=

我有两个画布,其中有类型路径。这些元素被放置在一个地图中,我有一个顶部坐标和一个左侧坐标。这些元素的边框颜色不同。它们在边界处重叠,因此只显示一个元素边界颜色。有没有一种方法可以调整我的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>
Canvas.Left=“{Binding CountryView.X}”Canvas.Top=“{Binding CountryView.Y}”Canvas.ZIndex=“{Binding CountryView.Z}”>

其中CountryView是我的国家列表。我对DashArray进行了一些研究,是否可以在国家共享边界的地方应用破折号,这样在边界处,每种颜色的破折号都会发生变化,但是这个国家的其他地方和这个国家的颜色是一条线吗?

如果你有和我一样的经历,你会遇到很多这些小问题,它们可能会成为一个巨大的痛苦*,但是……幸运的是,你总是可以找到一个解决办法或技巧,你会在一路上学会。对于您当前的问题,您有一些选项可以帮助您的用户解决问题。这里只是其中的一些

ScaleTransform
Margin
用于轮廓的
路径
增加1个或更多像素,以留出一点空间,使边框彼此相邻显示,而不必重叠

在路径之间利用
不透明度
,无论是通过专门将
不透明度
直接设置为
路径
,还是通过使用作为笔划提供的颜色的Alpha通道,例如
59ff0000
,至少允许重叠边界上的颜色对比度。比如说你有两条路径,一条蓝色,一条黄色,然后它们重叠的地方会显示绿色

通过
StrokeDashArray
创建对比度,正如您指出的那样,使用空格/宽度交错边框,这样即使它们重叠,也不会显示在彼此的上方,这也是
StrokeDashOffset
可以派上用场的地方

如果您允许用户与这些形状进行交互,我还可以向您展示如何将
VisualStateManager
应用于路径,并在选择时设置
笔划
破折号的动画等,以使用户能够更清楚地看到他们选择的区域

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

更新: 您可以像这样使用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比例因子以满足您的需要。95本身可能会提供一个不错的结果。

我尝试了边距,但它不适合我。如果你能给我举个例子就好了。不透明度看起来不太好,因为有些国家的边界有四种不同的颜色。当你直接在路径上应用边距时,它是什么样子的?它没有被调用吗?如果不是,您可以尝试将其嵌入到ViewBox中,并对其应用填充/边距,但出于性能原因,如果您有大量元素,我建议您不要这样做。W当我尝试直接应用边距时,不会发生任何情况,不会调用它,这与我使用ViewBox时的情况相同。有什么建议吗?请看我更新的答案,你只需要使用
渲染转换
它背后的想法很好,唯一的问题是我有很多不同的国家使用相同的用户控件,当我开始渲染转换以适应边界时,不同的国家需要他们自己的效果图转换来适应。