TabControl中的WPF zIndex

时间:2009-03-27 02:50:57

标签: .net wpf popup z-index

我正在尝试让zIndexing处理自定义的UserControl,但是当它在TabControl中弹出时它会剪切控件的底部,如下所示:

Demo of Control

这是我的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>

3 个答案:

答案 0 :(得分:2)

从你的例子中不清楚你对ZIndex的期望是什么。 ZIndex仅影响同一容器中元素的相对堆叠,因此您的示例中没有任何ZIndex设置会产生任何影响。订单列表将被TabItem剪裁,无论它与其任何子节点之间的ZIndex的相对值如何。

答案 1 :(得分:2)

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

值得注意的是,StackPanel之类的容器将始终“堆叠”其子控件(因此名称),这意味着子控件永远不会重叠。出于这个原因,在任何一个孩子的上面设置Z-index是没有意义的。我建议使用Grid或Canvas作为您希望重叠控件然后设置其Z-Index的容器。此外,请记住,Z-Index仅与控件的直接父级的上下文相关,因此如上例所示,给出所有控件Panel.Zindex =“n”将不起作用。

从我所看到的,这个问题是布局问题,而不是Z索引问题。

答案 2 :(得分:1)

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

不确定这是否适合您尝试做的事情,但值得一试。容器中的项目将被剪切到其父容器的边界,因此为了实现您正在寻找的东西,我认为UserControl必须是StackPanel的兄弟,而不是它的孩子。