问题描述
||
嘿,我有一个Canvas,其中添加了一堆ContentControls作为子级。每个ContentControl的顶部都有一个装饰器,用于检测对ContentControl的点击(以及其他功能)。我想更改ContentControl的ZIndex,然后更改哪个ContentControl检测到单击。我更改了装饰器的ZIndex,但是当我单击看起来位于顶部的ContentControl(较高的ZIndex)时,后面的控件检测到该单击,这与重新排列ZIndex之前的方式相同。
那么,我该如何解决呢?
这是我用来更改Adorner的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中的装饰者ZOrder。