C# 绘制多段线并显示其相关ID

C# 绘制多段线并显示其相关ID,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,假设我有这种csv文件 ID,X,Y A,1,2 B,3,4 C,5,6 我用上面的坐标在画布上画多段线,例如这样 <Polyline Points="1,2 3,4 5,6" Stroke="Black" StrokeThickness="4" Canvas.Left="150" /> 但我还想在文本中显示每个多段线点对应的ID 如何在XAML中实现这一点。我认为实现这一点的最佳方法是创建一个自定义控件,用它绘制多段线和文本块。 <Ca

假设我有这种csv文件

ID,X,Y
A,1,2
B,3,4
C,5,6
我用上面的坐标在画布上画多段线,例如这样

  <Polyline
    Points="1,2 3,4 5,6"
    Stroke="Black"
    StrokeThickness="4"
    Canvas.Left="150" />
但我还想在文本中显示每个多段线点对应的ID


如何在XAML中实现这一点。

我认为实现这一点的最佳方法是创建一个自定义控件,用它绘制多段线和文本块。
<Canvas>

    <Polyline Points="1,2 3,4 5,6"
              Stroke="Black"
              StrokeThickness="4"
              Canvas.Left="150" />

    <TextBlock Canvas.Left="151" Canvas.Top="2" Text="A" />
    <TextBlock Canvas.Left="153" Canvas.Top="4" Text="B" />
    <TextBlock Canvas.Left="155" Canvas.Top="6" Text="C" />

</Canvas>
我很快给你写了一些东西 它不好,你不应该按原样使用它,但应该给你一个大致的方向:

<UserControl x:Class="Opfi.myPolyLine"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:Opfi"
         mc:Ignorable="d"              
         d:DesignHeight="500" d:DesignWidth="500">
<Canvas Name="HiddenCanvas" Height="{Binding ElementName=line, Path=ActualHeight}" Width="{Binding ElementName=line, Path=ActualWidth}">        
    <Polyline Name="line" Points="{Binding Points}" Stroke="{Binding Stroke}" StrokeThickness="{Binding StrokeThickness}"/>
</Canvas>
您可以在xaml中这样使用它:

<local:myPolyLine Points="0,0 100,100 200,100 300,60 100,00" Stroke="HotPink" StrokeThickness="10"/>
看起来像这样:

编辑:
你完全改变了你的问题!因此,这个答案将不再有多大意义,即使稍加修改,它仍然可以正常工作。点集合不是点,而是包含{ID,X,Y}的自定义类的可观察集合,而不是显示X,Y显示ID

文本的坐标应该是什么?多段线很可能位于画布上,只需在画布上放置一个TextBlock并设置其canvas.Left和canvas.Top属性。文本应该是相关点X、Y的Id。例如,在本例中。对于每一点,文本都是A、B、C,这并不能回答我的问题。请参见我的答案实现这一点的最佳方法是创建一个自定义控件,该控件绘制一条多段线及其文本块
<local:myPolyLine Points="0,0 100,100 200,100 300,60 100,00" Stroke="HotPink" StrokeThickness="10"/>