如何在一个 XAML 中组合 StackPanel 和 Grid

How to combine StackPanel and Grid within one XAML

提问人:Dominique 提问时间:11/17/2023 最后编辑:AShDominique 更新时间:11/17/2023 访问量:41

问:

我有一个 ,它包含(在主内部)一个带有边距的 ,它在我的 中创建一个矩形,这非常简单:UserControlGridStackPanelUserControl

<Grid Name="mainGrid" HorizontalAlignment="Center" VerticalAlignment="Top" >
    <StackPanel Orientation="Vertical" Margin="15">

结果:

enter image description here

我知道将“拆分”为不同的部分非常容易(因为我想在以下部分添加一个上下文菜单):UserControlUserControl

<Grid Name="mainGrid" HorizontalAlignment="Center" VerticalAlignment="Top" >
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="0.77*"></RowDefinition>
            <RowDefinition Height="0.23*"></RowDefinition>
        </Grid.RowDefinitions>
    </Grid>        

结果:

enter image description here

现在我想将两者结合起来:我希望我的同时包含 StackPanel 和 Grid,但这似乎并不那么简单:UserControl

<Grid Name="mainGrid" HorizontalAlignment="Center" VerticalAlignment="Top" >
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition Height="0.77*"></RowDefinition>
        <RowDefinition Height="0.23*"></RowDefinition>
      </Grid.RowDefinitions>
    </Grid>

    <StackPanel Orientation="Vertical" Margin="15">

预期结果:

enter image description here

实际结果是一条错误消息:

XLS0509
Property elements cannot be in the middle of an element's content. 
They must be before or after the content.

我该如何解决这个问题?

提前致谢

WPF XAML

评论

2赞 Joe 11/17/2023
您没有发布完整的 XAML。编辑您的帖子以显示其余部分,在声明到包含的末尾之后StackPanelGrid
0赞 Dominique 11/17/2023
@Joe。我真的很抱歉,但我又试了一次,现在它起作用了,我不知道我做错了什么。

答:

0赞 Andy 11/17/2023 #1

我只能从你发布的 xaml 中猜到你做错了什么。

我怀疑您在网格之外和用户控件标记内有一些东西。我无法复制该特定错误。但我可以让它工作。

这对我来说很好用:

<UserControl x:Class="WpfApp7.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApp7"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid Name="mainGrid" HorizontalAlignment="Center" VerticalAlignment="Top" >
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="0.77*"></RowDefinition>
                <RowDefinition Height="0.23*"></RowDefinition>
            </Grid.RowDefinitions>
        </Grid>
        <StackPanel Orientation="Vertical" Margin="15">
            <Rectangle Fill="Red" Height="20" Width="20"/>
        </StackPanel>
    </Grid>
</UserControl>

评论

0赞 Dominique 11/17/2023
是的,谢谢,这是我以前尝试过的,但没有奏效,但现在出于某种神奇的原因,它似乎仍然有效。非常感谢您的支持。
0赞 Dominique 11/17/2023
现在我已经看到了:我的“主网格”有一些行和列定义。这些需要在“主电网”声明之后直接定义,我在这些定义之前添加了新的定义。对不起,负担。Grid