在每个路径中放置标签

Posted

技术标签:

【中文标题】在每个路径中放置标签【英文标题】:Put labels in each Path 【发布时间】:2016-05-30 16:23:45 【问题描述】:

我正在 XAML 中绘制一些路径,但我想在每个房间中放置标签。所以:

示例工厂

我想写例如:特定坐标中的走廊。

代码 XAML: - 这不是该工厂的实际代码,但我使用的是相同的 MINICode - M & Z

<StackPanel>
   <Viewbox Stretch="Fill" HorizontalAlignment="Left" Height="600" VerticalAlignment="Top" Width="600">
        <Grid>

            <Path Fill="#ff221e1f" Data="F1 M 65.778,45.310 L 85.092,45.310 L 85.092,47.630 L 68.504,47.630 L 68.504,63.174 L 83.700,63.174 L 83.700,65.494 L 68.504,65.494 L 68.504,84.402 L 65.778,84.402 L 65.778,45.310 Z"/>
            <Path Fill="#ff221e1f" Data="F1 M 95.300,64.218 L 101.505,64.218 C 107.538,64.218 111.482,60.854 111.482,55.692 C 111.482,49.718 107.074,47.282 100.926,47.282 C 98.257,47.282 96.286,47.572 95.300,47.804 L 95.300,64.218 Z M 92.574,45.832 C 94.952,45.310 98.316,45.020 100.984,45.020 C 106.087,45.020 109.278,46.122 111.540,48.268 C 113.222,49.892 114.266,52.502 114.266,55.228 C 114.266,60.506 111.133,63.870 106.610,65.436 L 106.610,65.552 C 109.742,66.538 111.713,69.496 112.642,73.846 C 113.976,79.936 114.730,82.836 115.542,84.402 L 112.642,84.402 C 112.062,83.242 111.192,79.820 110.148,74.890 C 108.988,69.264 106.551,66.712 101.390,66.480 L 95.300,66.480 L 95.300,84.402 L 92.574,84.402 L 92.574,45.832 Z"/>
            <Path StrokeThickness="3.0" Stroke="#ff221e1f" StrokeStartLineCap="Round" StrokeEndLineCap="Round" StrokeLineJoin="Round" Data="F1 M 179.125,90.312 C 179.125,139.362 139.362,179.125 90.312,179.125 C 41.263,179.125 1.500,139.362 1.500,90.312 C 1.500,41.263 41.263,1.500 90.312,1.500 C 139.362,1.500 179.125,41.263 179.125,90.312 Z"/>
            <Path StrokeThickness="3.0" Stroke="#ff221e1f" StrokeStartLineCap="Round" StrokeEndLineCap="Round" StrokeLineJoin="Round" Data="F1 M 75.533,117.798 L 103.986,117.798"/>
        </Grid>
    </Viewbox>
</StackPanel>

如何将标签放在我想要的坐标中?

最好的问候,

【问题讨论】:

【参考方案1】:

我会使用Canvas 作为面板而不是Grid,然后您可以使用附加属性Canvas.LeftCanvas.Top 定位元素。

【讨论】:

嗨@H.B.谢谢你的回答,但我想写在房间中间。比如A室,B室,1号馆,2号馆。你知道另一种方式吗?我需要定义正确的位置。 嗯,有一些算法可以为多边形找到某种中心,然后您只需将标签放在那里并在两个方向上向后移动 50%(例如,使用 TranslateTransform 并在 XAML 方面写标签?仅仅放置 还不够吗?我必须定义位置,但我真的不知道该怎么做。我找到了其中一种算法,并且找到了路径中所有图形的所有中心,但是我必须将它们与文本一起传递到 XAML 中的某个位置。你能帮我实现吗? @Antoine:如答案中所述,您在Label 上设置Canvas.Left/Top 以定位它。如果您有一组标签,则需要将其绑定到 ItemsControl,其中 Canvas 作为其 ItemsPanel,标签作为其 ItemTemplate,您可以在 *** 上找到有关如何轻松设置的答案,被问了几十次了。

以上是关于在每个路径中放置标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在标签中放置滑块值?

在 WKInterfaceTable 行中放置一个图像和两个标签

标签从数据库c#中放置随机值

在 Plotly Dash 图表中放置刻度标签 - Python

如何在 struts2 文本字段标签中放置占位符?

如何在翡翠中放置一个有条件的html标签?