操纵装饰者的 ZIndex 以更改控件之间的点击检测



嘿,我有一个 Canvas,上面添加了一堆 ContentControls 作为子项。每个 ContentControl 的顶部都有一个装饰器,用于检测 ContentControl 上的点击(以及其他功能)。我想更改 ContentControl 的 ZIndex,从而更改哪个 ContentControl 检测到点击。我更改了装饰器的 ZIndex,但是当我单击看起来位于顶部的 ContentControl 时(更高的 ZIndex),后面的控件会检测到单击,这是 ZIndex 重新排序之前的方式。

那么,我该如何解决这个问题呢?

这是我用来更改装饰器的 ZIndex 的代码:

Panel.SetZIndex(mSelectionAdorner, (int)RegionContent.ZIndex);

mSelectionAdorner 是对位于 ContentControl 之上的装饰器的私有引用。

谢谢。

由于某种原因,Panel.ZIndex不能用于装饰器的订购。装饰控件的相对 ZIndex 对装饰器的顺序也无关紧要,因为装饰器被抬起并放入位于所有实际控件之上的装饰器层中。

我也有类似的问题,但只需要对我的装饰品进行特定的订购。我最终使用反射来设置顺序:

var setZOrderMethodInfo = adornerLayer.GetType().GetMethod("SetAdornerZOrder", 
      System.Reflection.BindingFlags.NonPublic |  
      System.Reflection.BindingFlags.Instance);     
setZOrderMethodInfo.Invoke(adornerLayer, new object[] { adorner1, 0 });     
setZOrderMethodInfo.Invoke(adornerLayer, new object[] { adorner2, 1 });

来自 AdornerLayer 中的 Adorners 的 ZOrder 。

最新更新