2

タイプ Path を持つ 2 つの Canvas があります。これらの要素は、上座標と左座標を持つマップに配置されます。これらの要素は、境界線の色が異なります。それらの境界で重なり合うため、色付きの要素の境界の 1 つだけが表示されます。これらの要素をマップに配置すると、ViewModel のリストから取得するため、上と左の座標を変更せずに、両方の境界線が表示されるように xaml コードを調整する方法はありますか。重複する 2 つの国の一例は次のとおりです。

重なり合う国の例

写真でわかるように、スコットランドとアイルランドの国境しか見えませんが、イングランドは見えません。国ごとに使用している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 を少し調べました。国が国境を共有する場所にダッシュを適用することは可能ですか?国境では各色のダッシュを変更しますが、国の残りの部分は国と 1 つの線になります色?

4

1 に答える 1

2

*で大きな問題になる可能性があるという私と同じ経験がある場合は、これらの小さな問題の多くに遭遇することになりますが、.... 幸いなことに、ほぼ常に回避策または実行できるトリックがあります。途中で拾うものです。現在の問題については、ユーザーを支援するいくつかのオプションがあります。以下はそのほんの一部です。

ScaleTransformまたは、アウトラインに 1 ピクセル以上使用して、境界線が隣り合って表示され、必ずしも重ならないようにするための小さなスペースを確保しますMarginPath

具体的に を に直接設定するか、ストロークとして提供された色のアルファ チャンネルを使用するかによってOpacity、パス間で利用します。これにより、重なっている境界線の色に少なくともコントラストを持たせることができます。たとえば、パスが 2 つ、青が 1 つ、黄色が 1 つあるとします。これらが重なる部分は緑になります。OpacityPath#59ff0000

あなたが指摘したように、スペース/幅を使用して境界線をずらしてコントラストを作成し、StrokeDashArrayそれらが重なっても互いに重ならないようにします。これはStrokeDashOffset便利な場所でもあります.

ユーザーがこれらの形状を操作できるようにしている場合はVisualStateManager、パスに a を適用し、それらが選択されたときにダッシュをアニメーション化し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>

Scale X/Y 係数をニーズに合わせて調整できますが、.95 で十分な結果が得られるはずです。

于 2013-10-25T21:05:44.970 に答える