C# 如何使UserControl浮动在xaml的其余部分上?
英语不是我的主要语言,编辑是非常受欢迎的 我决定在我的wpf应用程序中创建我自己的专用标题栏。到目前为止,一切都很顺利。直到我不得不在标题栏下(比如说按下一个按钮)显示一些东西,但在窗口内容的其余部分 我为每个我想拥有标题栏的窗口制作了一个自定义样式,如下所示: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
<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是第一位,我会让他的答案成为我认可的答案。