2

我有一个带有装饰器的网格来提供一些绘制的图案。见图片:http: //imgur.com/D649W

我的问题是这个装饰器(网格上的点)是分层的。白色方块是可拖动的,但现在当装饰器在顶部时,我无法拖动。我希望该层位于添加到网格的每个组件的后面。关于如何设置 ZIndex 的任何建议?

谢谢。

下面的代码:

  MyAdorner ad = new MyAdorner(grid);
  AdornerLayer adLayer = AdornerLayer.GetAdornerLayer(grid);
  adLayer.Add(ad);

我按下按钮,将 MyAdorner 添加到网格中。MyAdorner 看起来像这样:

public MyAdorner(Grid adornedGrid)
: base(adornedGrid) {
Height = adornedGrid.Height;
Width = adornedGrid.Width;
brush = new VisualBrush();
brush.Stretch = Stretch.Fill;
brush.TileMode = TileMode.Tile;
brush.Viewport = new Rect(0, 0, SnapDistance, SnapDistance);
brush.ViewportUnits = BrushMappingMode.Absolute;
brush.Viewbox = new Rect(0, 0, SnapDistance, SnapDistance);
brush.ViewboxUnits = BrushMappingMode.Absolute;
ellipse = new Ellipse() { Fill = new SolidColorBrush(Colors.Blue), Width = 2, Height = 2 };
brush.Visual = ellipse;
}

protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) { 
Pen renderPen = new Pen(new SolidColorBrush(Colors.Black), 0); 
drawingContext.DrawRectangle(brush, renderPen, new Rect(new Point(0, 0), AdornedElement.DesiredSize)); 
}
4

4 回答 4

1

如果您的问题是装饰器覆盖了您想要操作的元素,以便它们变得不可拖动等,请设置.IsHitTestVisible = False在装饰器上。

如果需要,您还可以将装饰器的不透明度设置为某个半透明值,以通过它查看背景。

于 2013-08-08T16:07:40.750 回答
0

这是你要找的吗?

Panel.SetZIndex(ad, 20)

框架的附加属性通常可以从包含它的 UIElement 的静态方法中分配。

编辑:
可能的替代方案:-制作自己的面板

于 2011-10-26T11:26:11.023 回答
0

确保您想要的元素始终位于顶部的简单而肮脏的方法:

在 Util 库中声明一个静态变量:

      public static int ZIndexCount;

然后,当您想要一个元素在顶部时,您只需执行以下操作:

         SetZIndex(_viewbox, Util.ZIndexCount++);

当然,如果您的应用程序运行 5 年没有被中断,ZIndexCount 将回到 0...

它在我的应用程序中就像一个魅力。

于 2011-10-26T11:46:14.980 回答
0

我知道这已经很老了,但我想我还是试试看:您可以向您的可视化树层次结构添加一个新的 AdornerDecorator 以在正确的级别呈现控件。默认情况下,树的根提供 AdornerDecorator,但您可以添加任意数量的组件,并且您添加的组件将在其中呈现。有关更多信息 - 请参见此处

  <Grid>
     <AdornerDecorator>
        ...your Adorners render here
     </AdornerDecorator>
 </Grid>

https://wangmo.wordpress.com/2008/10/19/relations-between-adorner-adornerlayer-and-adornerdecorator/

于 2015-10-08T17:21:54.387 回答