Wpf 意外的自动栅格列宽

Wpf 意外的自动栅格列宽,wpf,wpf-grid,Wpf,Wpf Grid,下面的代码是我在项目中使用的一个大wpf窗口的一个小片段。它生成链接的wpf窗口 我想知道为什么我的最后一个网格列这么宽。我希望最后一列的宽度取决于按钮的宽度,因为列宽设置为“自动”。 如果删除StackPanel的columnspan,则列宽将正确,但复选框未与右侧对齐 我希望你理解我的问题。我的目标是,最后一列尽可能小,复选框在右边,其余的保持不变 因为这个代码段是更大wpf窗口的一部分,所以我无法删除任何网格行或列 非常感谢你的帮助 致以最良好的祝愿 您可以将一个网格放入另一个网格中

下面的代码是我在项目中使用的一个大wpf窗口的一个小片段。它生成链接的wpf窗口


我想知道为什么我的最后一个网格列这么宽。我希望最后一列的宽度取决于按钮的宽度,因为列宽设置为“自动”。 如果删除StackPanel的columnspan,则列宽将正确,但复选框未与右侧对齐

我希望你理解我的问题。我的目标是,最后一列尽可能小,复选框在右边,其余的保持不变

因为这个代码段是更大wpf窗口的一部分,所以我无法删除任何网格行或列

非常感谢你的帮助

致以最良好的祝愿



您可以将一个网格放入另一个网格中

以下是帮助您实现目标的代码

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <TextBox Grid.Column="0" 
             Grid.Row="0"
             Margin="5"
             Grid.ColumnSpan="2"/>

        <Button Grid.Column="2" 
            Grid.Row="0"
            Margin="5"
            Width="40"/>

        <ComboBox Grid.Column="0"
              Grid.Row="1"
              Margin="5"
              Grid.ColumnSpan="3"/>

        <Grid Name="GridInsideAGrid"
                Grid.Column="0"
                Grid.Row="2"
                Grid.ColumnSpan="3">

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>

            <Image Grid.Column="0" />
            <StackPanel Grid.Column="1">
                <CheckBox Margin="5"
                  Content="checkbox content 1"/>

                <CheckBox Margin="5,0,5,5"
                  Content="checkbox content 2"/>
            </StackPanel>
        </Grid>
    </Grid>


“为什么我的上一个网格列这么宽”。带有复选框的StackPanel也需要一些空间。复选框比按钮宽。因此,列越来越宽,但StackPanel和复选框位于按钮之外的另一列中。首先,StackPanel应扩大其自身列的大小,而不是使用最后一列的空间。由于
网格,StackPanel分为两列。ColumnSpan=“2”
。“首先,StackPanel应该扩大其自身列的大小,而不是使用最后一列的空间”-显然Grid还有其他想法。不,您的StackPanel位于第2列内,因为
Grid.column=“1”Grid.ColumnSpan=“2”
@CelsoLívero,那么第1列应该没有任何宽度。对不起,但是如果我调整窗口的大小,图像的大小就不正确了。图片必须直接在复选框的左边结束。我更改了答案。请看一看。将第二个网格中的控件与我的其他控件(在我的“更大”窗口中)对齐有点棘手,但它可以工作。非常感谢。
<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <TextBox Grid.Column="0" 
             Grid.Row="0"
             Margin="5"
             Grid.ColumnSpan="2"/>

        <Button Grid.Column="2" 
            Grid.Row="0"
            Margin="5"
            Width="40"/>

        <ComboBox Grid.Column="0"
              Grid.Row="1"
              Margin="5"
              Grid.ColumnSpan="3"/>

        <Grid Name="GridInsideAGrid"
                Grid.Column="0"
                Grid.Row="2"
                Grid.ColumnSpan="3">

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>

            <Image Grid.Column="0" />
            <StackPanel Grid.Column="1">
                <CheckBox Margin="5"
                  Content="checkbox content 1"/>

                <CheckBox Margin="5,0,5,5"
                  Content="checkbox content 2"/>
            </StackPanel>
        </Grid>
    </Grid>