inkcanvas 的画线跟文字混写的问题
在inkcanvas中,画线中,需要绘制文字在上面,以前采用在inkcanvas的children中添加 textblok代码段:
TextBlock ret = new TextBlock();
inkCanvas.Children.Add(ret);
ret.Text = diagramItem.content;
ret.Width = diagramItem.width;
ret.TextWrapping = TextWrapping.Wrap;
InkCanvas.SetLeft(ret, diagramItem.x);
InkCanvas.SetTop(ret, diagramItem.y);
但是添加的文本总是在画笔墨迹 的下面,我的想法最后画的总在最上层覆盖了下面的墨迹或者文字。后面经摸索,通过VisualTreeHelper获取到ContainerVisual
代码段:
//层容器
AdornerDecorator dronerdec = (AdornerDecorator)VisualTreeHelper.GetChild(inkcanvas, 0);
//获取层容器的元素
InkPresenter inkpresenter = (InkPresenter)dronerdec.Child;
ContainerVisual strokecontainervisual = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(inkpresenter, 1), 1) as ContainerVisual;
DrawingVisual visual = new DrawingVisual();
var drawingContext = visual.RenderOpen();
drawingContext.DrawText(
new FormattedText(
diagramItem.content,
System.Globalization.CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
new Typeface(new FontFamily(), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal),
12,
Brushes.Black),
new Point(diagramItem.x, diagramItem.y));
drawingContext.Close();
strokecontainervisual.Children.Add(visual);
通过DrawingVisual能绘制文本,但是画笔画的墨迹产生时会对 VisualCollection里面的默认加到最后的System.Windows.Ink.Renderer.StrokeVisual的后面,而不是加到集合的最后,所以在此请求各位大侠搞过inkcanvas的指点迷津? --------------------编程问答-------------------- 没看明白。
是要文字在画线的上面么?试试设置一下TextBlock的IsHitTestVisible属性(鼠标穿透)。
补充:.NET技术 , C#