1

我试图让 zIndexing 在自定义 UserControl 上工作,但是当它在 TabControl 内弹出时,它会剪切控件的底部,如图所示:

控制演示

这是我的 XAML

<StackPanel Panel.ZIndex="1">
    <TabControl Name="TabCtrlMain" Panel.ZIndex="2">
        <TabItem Name="TabItmOrdrLst" Visibility="Collapsed" Panel.ZIndex="3" >
            <StackPanel Panel.ZIndex="4">
                <ri:OrderList x:Name="OrderList" Panel.ZIndex="5" />
                <Rectangle Fill="Orange" Height="80" Width="300" />
            </StackPanel>
        </TabItem>
    </TabControl>
    <Rectangle Fill="Blue" Height="80" Width="300" />
</StackPanel>
4

3 回答 3

2

从您的示例中不清楚您期望 ZIndex 做什么。ZIndex 仅影响同一容器中元素的相对堆叠,因此您在示例中拥有的任何 ZIndex 设置都不会产生任何影响。OrderList 将被 TabItem 裁剪,无论它与其任何子项之间的 ZIndex 的相对值如何。

于 2009-03-27T06:07:43.687 回答
2

从您发布的图像中,用户控件看起来好像有某种模拟弹出窗口(注释窗格),它是 UserControl 的子级。如果是这种情况,如果 Notes 面板不是 OrderList 布局计算的一部分,它可能会解释剪裁。考虑使 Notes 控件成为真正的弹出窗口,或者使用类似 Expander 的东西,当展开时,它可以告诉它的父级(UserControl)它需要更多空间来呈现。

值得注意的是,像 StackPanel 这样的容器将始终“堆叠”它们的子控件(因此得名),这意味着子控件永远不会重叠。出于这个原因,在它的任何子节点上设置 Z-index 是没有意义的。我建议使用 Grid 或 Canvas 作为您想要重叠控件的容器,然后设置它们的 Z-Index。另外,请记住 Z-Index 仅在控件的直接父级上下文中相关,因此如上例中的所有控件 Panel.Zindex="n" 将不起作用。

据我所知,这个问题是布局问题,而不是 Z-index 问题。

于 2009-03-27T06:10:57.220 回答
1

也许您想将 UserControl 从 StackPanel 中分离出来。您可以在 Z 平面中使用元素放置的方法是使用 Grid 作为最外面的容器(如果您还没有这样做的话)并将其用作布局元素的指南。由于网格内的项目可以占据相同的空间并根据它们的声明顺序进行 z 排序,因此您可能能够获得您正在寻找的功能。

不确定这是否符合您的要求,但值得一试。容器中的项目将在其父容器的边界处被剪裁,因此要完成您要查找的内容,我认为 UserControl 必须是 StackPanel 的兄弟而不是它的子项。

于 2009-03-27T06:10:38.830 回答