我有一个带有装饰器的网格来提供一些绘制的图案 . 见img:http://imgur.com/D649W
我的问题是,这个Adorner(网格上的点)是在所有内容之上 . 白色方块是可拖动的,但现在当Adorner位于顶部时,我无法拖动 . 我希望该层位于添加到Grid的每个组件的后面 . 关于如何设置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 回答
这是你在找什么?
框架的附加属性通常可以通过保存它的UIElement的静态方法来指定 .
EDIT:
可能的选择: - make your own Panel
简单而肮脏的方式,以确保您想要的元素总是在顶部:
在Util库中声明一个静态:
然后当你想要一个元素在上面时,你只需:
当然,如果您的应用程序运行5年而不会被中断,ZIndexCount将返回0 ...
它在我的应用程序中就像一个魅力 .
如果您的问题是装饰器覆盖了您想要操作的元素以使它们变得不可拖动等,请在装饰器上设置
.IsHitTestVisible = False
.您还可以将装饰器的不透明度设置为某个半透明值,以便在需要时通过它查看背景 .
我知道这已经很老了但是我想我还是尝试了:你可以在你的可视树层次结构中添加一个新的AdornerDecorator来将控件渲染到正确的级别 . 默认情况下,树的根提供AdornerDecorator,但您可以根据需要添加任意数量,并且您添加的组件将在其中呈现 . 有关更多信息 - 请参阅此处
https://wangmo.wordpress.com/2008/10/19/relations-between-adorner-adornerlayer-and-adornerdecorator/