TextBlock在wpf C#中的图像内的特定坐标中设置

Posted

技术标签:

【中文标题】TextBlock在wpf C#中的图像内的特定坐标中设置【英文标题】:TextBlock Set in a specific Co ordinate inside an image in wpf C# 【发布时间】:2021-03-01 13:25:01 【问题描述】:

我遇到了一个问题。我可以从 2 点计算距离。我想在 Draw Line 之后设置 TextBlock 。请注意,我不使用任何 Graphics 属性来写入 image 。我使用 TextBlock 因为那不是写在 image 里面。这是我的 XAML 代码..

 <Canvas Margin="10" IsEnabled="Binding IsEnableCanvas"  Visibility="Binding Path=ISCanvasVisible, Converter=StaticResource Converter">
                <!--<Canvas Margin="10,10,0,10" IsEnabled="Binding IsEnableCanvas" Background="Gray"  Visibility="Binding Path=ISCanvasVisible, Converter=StaticResource Converter" HorizontalAlignment="Left" Width="150"  >-->
                <Image Source="Binding DIIMG_For_Folder"    cal:Message.Attach="[Event MouseDown] = [Action MDownCalCulateDistance_Right($source, $eventArgs)];
                [Event MouseUp] = [Action MUpCalCulateDistance_Right($source, $eventArgs)];
                [Event MouseMove] = [Action MMoveCalCulateDistance_Right($source, $eventArgs)]" Stretch="Uniform" />
                <Line Visibility="Binding Path=ISLineDistanceVisible, Converter=StaticResource Converter"  IsHitTestVisible="False"  X1="Binding FirstPoint_Right.X" Y1="Binding FirstPoint_Right.Y"
                  X2="Binding SecondPoint_Right.X" Y2="Binding SecondPoint_Right.Y"
                  Stroke="Red" StrokeThickness="3">
                </Line>
                <TextBlock Text="Binding Path=DisTanceInMM_Right, Mode=OneWay" Margin="15" FontSize="20" Foreground="Red" ></TextBlock>
            </Canvas>

如您所见,我使用属性连接两个点并显示线。但是您也看到了 TextBlock 我设置了一个固定点,即 Margin 15 。我想在 secondpoint.x 和 Secondpoint.Y 之后画线时设置。这是我的 C# 代码

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

                    _firstPointRight = px1;
                
                else
                //if (_secondPointRight.X == 0 && _secondPointRight.Y == 0)
                
                    System.Windows.Point px2 = e.GetPosition((System.Windows.Controls.Image)sender);
                    _secondPointRight = px2;
                    var geometry = new FrameGeometry(DicomDataSet);
                    var patientCoord1 = geometry.TransformImagePointToPatient(new Point2(Convert.ToInt32(_firstPointRight.X), Convert.ToInt32(_firstPointRight.Y)));
                    var patientCoord2 = geometry.TransformImagePointToPatient(new Point2(Convert.ToInt32(_secondPointRight.X), Convert.ToInt32(_secondPointRight.Y)));
                    double distanceInMM = patientCoord1.Distance(patientCoord2);
                    DisTanceInMM_Right = Convert.ToDouble(distanceInMM.ToString("N3"));
                
            
            catch (DicomDataException)
            
                MessageBox.Show("This Dicom File Not Suported", "Alert", MessageBoxButton.OK, MessageBoxImage.Error);
            

DisTanceInMM_Righ 是我设置两点之间距离并使用 TextBlock 显示距离的属性。我想在Secondpoint之后设置可以吗。我不想用作 Margin 属性或固定位置 TextBlock 使用。请注意我使用的是 Caliburn.Micro 框架。

【问题讨论】:

【参考方案1】:

据我了解,您希望您的 TextBlock 出现在第二行点之后。如果是这样,您可以在 TextBlock 上使用 Canvas.LeftCanvas.Top 附加属性:

<TextBlock Canvas.Left="Binding SecondPoint_Right.X" Canvas.Top="Binding SecondPoint_Right.Y" Text="Binding Path=DisTanceInMM_Right, Mode=OneWay" FontSize="20" Foreground="Red"></TextBlock>

【讨论】:

以上是关于TextBlock在wpf C#中的图像内的特定坐标中设置的主要内容,如果未能解决你的问题,请参考以下文章

c# wpf 多个textblock滚动字幕怎么实现?

WPF(C#)中如何让数据库数据逐个显示在textblock中?

C# WPF TextBlock 可见性在 StoryBoard 之后没有改变

C# WPF 生成图像访问被拒绝

StackPanel 内的 WPF ViewBox

如何使 WPF 列表框中的列对于所有项目具有相同的宽度?