在 wpf C# 中的图像内的特定坐标中设置 TextBlock
TextBlock Set in a specific Co ordinate inside an image in wpf C#
我遇到了问题。我可以从 2 点计算距离。我想在 Draw Line 之后设置 TextBlock 。请注意,我没有使用任何 Graphics 属性 来写 inside 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>
如您所见,我使用 属性 连接两点并显示直线。但是您也看到了我设置的固定点即 Margin 15 的 TextBlock。我想在 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 属性 或 Fixed place TextBlock 使用。请注意我使用 Caliburn.Micro Framework .
据我了解,您希望 TextBlock 出现在第二行点之后。如果是这样,您可以在 TextBlock 上使用 Canvas.Left
和 Canvas.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>
我遇到了问题。我可以从 2 点计算距离。我想在 Draw Line 之后设置 TextBlock 。请注意,我没有使用任何 Graphics 属性 来写 inside 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>
如您所见,我使用 属性 连接两点并显示直线。但是您也看到了我设置的固定点即 Margin 15 的 TextBlock。我想在 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 属性 或 Fixed place TextBlock 使用。请注意我使用 Caliburn.Micro Framework .
据我了解,您希望 TextBlock 出现在第二行点之后。如果是这样,您可以在 TextBlock 上使用 Canvas.Left
和 Canvas.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>