WPF Stackpanel与其他元素重叠

时间:2016-07-30 06:40:42

标签: c# wpf

基本上标题是什么。 stackpanel与菜单重叠,我不明白为什么。这是XAML。

    <Grid>
        <Menu x:Name="menu" HorizontalAlignment="Left" Height="25" VerticalAlignment="Top" Width="592"/>
        <StackPanel x:Name="LOCATIONS" HorizontalAlignment="Left" Margin="0,25,0,0" VerticalAlignment="Top" Height="294"  Width="200" Background="LightGray"/>

    </Grid>
</Window>

Program

4 个答案:

答案 0 :(得分:1)

原因是因为Grid是一个容器。如果您将元素添加为子元素,则它们将相互重叠,最后一个子元素始终位于顶部。

您需要做的是在Rows中使用Grid,以便每个子元素都有自己的专用区域。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Menu x:Name="menu" Grid.Row="0" Height="25" />
    <StackPanel x:Name="LOCATIONS" Grid.Row="1" HorizontalAlignment="Left" Width="200" Background="LightGray"/>
</Grid>

上述代码可让您删除不必要的HeightsAlignments

您也可以使用DockPanel来达到同样的效果。

<DockPanel LastChildFill="True">
    <Menu x:Name="menu" DockPanel.Dock="Top" Height="25" />
    <StackPanel x:Name="LOCATIONS" HorizontalAlignment="Left" Width="200" Background="LightGray"/>
</DockPanel>

答案 1 :(得分:0)

您需要为网格定义行或列。

我建议你阅读本教程: http://www.wpftutorial.net/gridlayout.html

答案 2 :(得分:0)

您正在使用2个元素同时填充网格。相反,您应该在网格中定义两行。一行高度为20像素,第二行填充其余部分。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>
        <RowDefinition Height="100*/>
    </Grid.RowDefinitions>
    <Menu x:Name="menu" Grid.Row="0"/>
    <StackPanel x:Name="LOCATIONS" Grid.Row="1" Background="LightGray"/>
</Grid>

这可以解决您的问题。

答案 3 :(得分:0)

在Grid中,最高z-index应用于最后应用的元素,所以这里当你在菜单后声明stackpanel时,它得到的z-index比菜单的z-index为0,给出z-index为0,所以你使用Grid.Row或Panel.Z-index更好..