C# 如何使UserControl浮动在xaml的其余部分上?

C# 如何使UserControl浮动在xaml的其余部分上?,c#,wpf,user-controls,window,C#,Wpf,User Controls,Window,英语不是我的主要语言,编辑是非常受欢迎的 我决定在我的wpf应用程序中创建我自己的专用标题栏。到目前为止,一切都很顺利。直到我不得不在标题栏下(比如说按下一个按钮)显示一些东西,但在窗口内容的其余部分 我为每个我想拥有标题栏的窗口制作了一个自定义样式,如下所示: <Style x:Key="EditFormStyle" TargetType="Window"> <Setter Property="WindowStyle" Value="None"/> &l

英语不是我的主要语言,编辑是非常受欢迎的

我决定在我的wpf应用程序中创建我自己的专用标题栏。到目前为止,一切都很顺利。直到我不得不在标题栏下(比如说按下一个按钮)显示一些东西,但在窗口内容的其余部分

我为每个我想拥有标题栏的窗口制作了一个自定义样式,如下所示:

<Style x:Key="EditFormStyle" TargetType="Window">
    <Setter Property="WindowStyle" Value="None"/>
    <Setter Property="Background" Value="White"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Window">
                <DockPanel>
                    <c:TitleBar DockPanel.Dock="Top"/>
                    <c:ValidationPannel DockPanel.Dock="Top" Panel.ZIndex="1"/>
                    <ContentPresenter DockPanel.Dock="Bottom" />
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

所以窗口的内容将在我的标题栏下。这一切进展顺利。然后我想添加ValidationPannel,它可以在按下按钮时显示一些内容,以实现可见性开/关。这是很平常的特色。问题是,我希望ValidationPannel位于标题栏下(它是这样的),但位于窗口其余内容的上方。正如您所看到的,我尝试使用ZIndex,但没有成功。它不断地将内容推到它下面

有没有办法让UserControl浮动在内容上,隐藏它直到我说它再次不可见

提前谢谢


-->同样,请随意编辑。

我不确定我是否理解应该在什么之上设置什么,但如果您想将2个或更多控件置于彼此之上,则可以使用
网格

网格的子元素是按照它们在标记或代码中的显示顺序绘制的。因此,当元素共享相同的坐标时,可以实现分层顺序(也称为z顺序)

因此,假设您想将
ValidationPannel
放在
DockPanel
的顶部,使用
TitleBar
ContentPresenter

<ControlTemplate TargetType="Window">
    <Grid>
        <DockPanel>
            <c:TitleBar DockPanel.Dock="Top"/>
            <ContentPresenter/>
        </DockPanel>
        <c:ValidationPannel/>
    </Grid>
</ControlTemplate>

此外,您不必在
ContentPresenter
上设置
DockPanel.Dock=“Bottom”
,默认情况下,它将被忽略,
DockPanel
的最后一个子项将填充所有剩余空间:

如果将属性设置为true(默认设置),则DockPanel的最后一个子元素始终填充剩余空间,而不管在最后一个子元素上设置的任何其他dock值


DockPanel将始终具有此行为,您应该为content presenter容器使用其他控件(如画布或网格),当向布局中添加新控件时,这些控件不会自动调整其他控件。实际上,您需要使用支持绝对定位的容器

像这样的东西可以满足你的需要。注意,我没有包含任何位置逻辑,这只是容器层次结构

<DockPanel>
    <c:TitleBar DockPanel.Dock="Top"/>
    <Grid>
        <ContentPresenter/>
        <c:ValidationPane/>
    </Grid>
</DockPanel>


如果您真的想变得聪明,可以将网格设置为有两行(一行是验证面板的高度,另一行是*高度),将验证面板放在第一行中,并让内容演示器跨越这两行。这样,您的验证始终位于顶部(内容上方),ContentPresenter的填充方式与DockPanel中最后一个元素的填充方式相同。

这将使验证面板位于标题栏和内容上方。是的,我知道。正如我所写的“不确定我理解什么应该超过什么”,你们的两个答案通过更新我对wpf中容器概念的理解解决了我的问题。谢谢你们两位。我比你们两个投了更高的票,但因为dkozl是第一位,我会让他的答案成为我认可的答案。