检测鼠标下是否存在“绘制文本”?

时间:2016-10-25 13:53:11

标签: c# wpf

谢谢你看看我的难题。 我试图将一系列字符串写入图像作为叠加,然后能够返回并移动,或者有选择地使用WPF框架删除其中一个... 我一直在研究FindVisualChildren函数,但目前还无法确定如何检测鼠标的接近程度(选择性),或实际检测我创建的一个字符串(也许我应该让它们变得动态')标签'元素...... ????) 失眠很糟糕,我的大脑正在转向糊状 TIA任何建议!

好的,抱歉缺少示例代码,已经漫长的一夜......实际上是两个晚上(参见之前关于失眠的评论)

public void WriteTextToImage(Point position) 
{
  ImageSource bitmapSource = imgFrame.Source;
  var vis = new DrawingVisual();

  using (DrawingContext drawingContext = vis.RenderOpen())
  {
    // Set the pen color... Why is this called a brush if it's for
    // writing? perhaps I should overload it and call it crayon?
    SolidColorBrush brush = new SolidColorBrush((Color)cpColor.SelectedColor);
    drawingContext.DrawImage(bitmapSource, new Rect(0, 0, imgFrame.Source.Width, imgFrame.Source.Height)); 

    //Write some pretty words, (actually print some general stuff)
    drawingContext.DrawText(new FormattedText(tbCurrentLabel.Text, CultureInfo.InvariantCulture, FlowDirection.LeftToRight, new Typeface("Arial"), slFontSize.Value, brush),position); 
  }

  //Slap this puppy to the screen
  var image = new DrawingImage(vis.Drawing);

  //Iterate the label text to the next digit or value
  IterateLabel();
}

基本上会发生什么情况是用户会在几个地方点击屏幕在图像上做标记以进行打印,但我希望包括移动这些标记的支持,并根据需要删除它们。 我希望这能解释我想要做得更好一些。

再次感谢!

1 个答案:

答案 0 :(得分:0)

出色!感谢NineBerry,我觉得它会是那样的。我原本以为是一个标签,但是文本块完美无缺。

这是更新的代码,显示我现在如何完成它。

public void WriteTextToImage(Point position)
{
 SolidColorBrush brush = new SolidColorBrush((Color)cpColor.SelectedColor);
//Get something to write on (not an old receipt...)
TextBlock textBlock = new TextBlock();
//Say something useful... well something atleast...
textBlock.Text = tbCurrentLabel.Text;
textBlock.FontSize = slFontSize.Value;
textBlock.Foreground = brush;
Canvas.SetLeft(textBlock, position.X);
Canvas.SetTop(textBlock, position.Y);
canvas.Children.Add(textBlock);

//Need to update the canvas, was not seeing children before doing this.
canvas.UpdateLayout();
//迭代标签文本 IterateLabel(); }`