wpf C#中线条起点和终点的特殊形状

Posted

技术标签:

【中文标题】wpf C#中线条起点和终点的特殊形状【英文标题】:Special shape of Line starting and ending point in wpf C# 【发布时间】:2021-03-08 07:40:04 【问题描述】:

您好,我需要一个特殊形状的起点和终点线的解决方案。我使用线属性。我想要这样的解决方案。。

你可以看到这个 Line 属性在开头和结尾都有“+”的形状。如何在 XAML 和我的代码中执行。这是我的代码

<Canvas Margin="10" IsEnabled="Binding IsEnableCanvas"  Visibility="Binding Path=ISCanvasVisible, Converter=StaticResource Converter">
<Image Source="Binding DIIMGFINAL"    cal:Message.Attach="[Event MouseDown] = [Action MDownCalCulateDistance($source, $eventArgs)];
[Event MouseUp] = [Action MUpCalCulateDistance($source, $eventArgs)];
[Event MouseMove] = [Action MMoveCalCulateDistance($source, $eventArgs)]" Stretch="Uniform" />
<Line Visibility="Binding Path=ISLineDistanceVisible, Converter=StaticResource Converter"  IsHitTestVisible="False"  X1="Binding FirstPoint.X" Y1="Binding FirstPoint.Y"
X2="Binding SecondPoint.X" Y2="Binding SecondPoint.Y" StrokeStartLineCap="Triangle"  StrokeEndLineCap="Triangle" 
Stroke="Red" StrokeThickness="2">

</Line>
<TextBlock Canvas.Left="Binding TxtblckPoint_First_Left.X" Canvas.Top="Binding TxtblckPoint_Second_Left.Y" Text="Binding Path=DisTanceInMM, Mode=OneWay" FontSize="20" Foreground="Yellow"></TextBlock></Canvas>

如您所见,我使用了 StrokeStartLineCap 和 StrokeEndLineCap Triangle,但这不是我想要的。如果我使用更大的 StrokeThickness 值,它可以看到。但我的要求并没有那么厚。这是我的 C# 代码

                     if (_firstPoint.X == 0 && _firstPoint.Y == 0)
                    
                    System.Windows.Point px1 = e.GetPosition((System.Windows.Controls.Image)sender);

                    _firstPoint = px1;
                    
                    else if((_firstPoint.X != 0 && _firstPoint.Y != 0) && (_secondPoint.X == 0 && _secondPoint.Y == 0))
                    System.Windows.Point px2 = e.GetPosition((System.Windows.Controls.Image)sender);
                    _secondPoint = px2;
                    var geometry = new FrameGeometry(DicomDataSet);
                    var patientCoord1 = geometry.TransformImagePointToPatient(new Point2(Convert.ToInt32(_firstPoint.X), Convert.ToInt32(_firstPoint.Y)));
                    var patientCoord2 = geometry.TransformImagePointToPatient(new Point2(Convert.ToInt32(_secondPoint.X), Convert.ToInt32(_secondPoint.Y)));

                    FirstPoint = _firstPoint;
                    SecondPoint = _secondPoint;

我必须做些什么来展示起点和终点的特殊形状。提前致谢。

【问题讨论】:

在端点处放置两个您需要的任意形状的 Path 元素。 你能不能给出一些我看不懂的代码 我应该在 C# 或 XAML 中放置什么 【参考方案1】:

在端点放置两个您需要的任意形状的 Path 元素:

<Path Stroke="Red" Data="M-5,0 L5,0 M0,-5 L0,5"
      Canvas.Left="Binding FirstPoint.X"
      Canvas.Top="Binding FirstPoint.Y"/>

<Path Stroke="Red"
      Canvas.Left="Binding SecondPoint.X"
      Canvas.Top="Binding SecondPoint.Y">
    <Path.Data>
        <GeometryGroup>
            <LineGeometry StartPoint="-5,0" EndPoint="5,0"/>
            <LineGeometry StartPoint="0,-5" EndPoint="0,5"/>
        </GeometryGroup>
    </Path.Data>
</Path>

【讨论】:

谢谢。它可以创建形状,但 Line 不工作了,我正在处理这个 谢谢它的工作,但我遇到了另一个问题现在必须解决它

以上是关于wpf C#中线条起点和终点的特殊形状的主要内容,如果未能解决你的问题,请参考以下文章

wpf path起点与终点重合时画不出来圆

Pytohn OpenCV 绘图函数

百度地图怎么设置起点和终点

百度地图为啥不能任意设置起点和终点

绘制圆线iOS Swift

百度地图API 怎样实现根据起点和终点点击查询能出现路线